SU Ultim – Adding Pagination To SU-POSTS

https://getshortcodes.com/docs/posts/

 Template editing

Do not edit templates in the plugin folder, since all your changes will be lost after plugin update.

To modify a built-in template you should copy it to your theme directory first. For convenience, you can copy the whole templates folder from the plugin folder. You can rename the copied folder, it doesn’t have to be templates. Resulting path to template files should look like so:

/wp-content/themes/THEME-NAME/templates/

Now you can edit copied template files.

Use the template attribute to change the template used by shortcode. The value of this attribute must be a template file path relative to your theme’s folder. Example:



PHP Cheat Sheet

PHP Cheat Sheet The only paths that matter (Homebrew PHP 8.5 + Apache) PHP binary /opt/homebrew/bin/php PHP 8.5 config folder /opt/homebrew/etc/php/8.5/ Extra scanned INI files /opt/homebrew/etc/php/8.5/conf.d/ PHP-FPM main config /opt/homebrew/etc/php/8.5/php-fpm.conf PHP-FPM pool configs /opt/homebrew/etc/php/8.5/php-fpm.d/ yours: /opt/homebrew/etc/php/8.5/php-fpm.d/sandbox.conf Apache vhost file (your php sandbox site) /private/etc/apache2/extra/php-sandbox.local.conf Apache main config /etc/apache2/httpd.conf Apache logs (your sandbox vhost) /private/var/log/apache2/php-sandbox-error_log /private/var/log/apache2/php-sandbox-access_log […]

Categories and Tags

CATEGORIES TAGS

Gitlab – Backup / Update Steps

To update your GitLab instance to version 17.6, follow these steps: Review the Release Notes: Familiarize yourself with the new features, bug fixes, and any deprecations in version 17.6. GitLab check rhel [spiffy-root@spiffydesign ~]$ rpm -E %rhel 9 Cool — RHEL/Alma 9 means you want the .el9 builds. Install targets (in order) 1. gitlab-ee-18.5.5-ee.0.el9 2. […]

Signals Vault – Auth

Auth system complete. Two auth paths, both project-scoped: Path A — AccidAuth (primary) routers/auth.py POST /auth/verify-token — accepts X-Accid-Key + X-Accid-Hash + X-ACCID-App headers Auto-registers on first call (no separate registration step) Project scoping: pass {"project_id": "dragon-lady"} in body — keys accumulate project access on each successful auth GET /auth/key-info — returns registered projects, app, […]

ACCID Scraper Pipeline

+ JSON-noculars Complete System Documentation Version 2.0 — February 11, 2026 What This System Does The ACCID Scraper Pipeline takes any website, extracts its content (text, links, images, navigation), and converts it into a format the ACCID HTML Builder can import. The output is a static HTML site with the original content. No databases, no […]

./ACCID HTML Builder – Technical Overview

JSON Overview What It Is A standalone, client-side HTML page builder. No backend server required for core editing — pages are built in the browser, persisted to localStorage, and exported as static HTML via ZIP download or FTP upload. When served from an ACCID backend (PHP bridge or ACCID Vault), persistence extends to server-side storage. […]

accid banner tester

🎉 ACCID VAULT v2.0 – COMPLETE SYSTEM

ADDITION: See Tagger Integration guide 9 MONTHS IN THE MAKING – IT’S DONE! What You Got: 1. vault_enhanced.py (900+ lines) The complete, production-ready vault with EVERYTHING: ✅ Project Management – Waypoint tutorials – HTML sites – React apps – Unlimited projects from one install ✅ FTP Deployment – Original feature (your 30-line vault) – Now […]

Vault Deployment | 🎯 Clear Architecture: Web vs Desktop

Three Deployment Modes: Mode 1: Pure Web (No Vault Needed) User Browser ↓ https://yoursite.com/html-builder ↓ localStorage (editing) ↓ Browser FTP library (publishing) ↓ User’s FTP server Who: Public users on your siteInstall: NothingVault: Not needed (browser handles FTP) Mode 2: Web + Hosted Vault (Recommended) User Browser ↓ https://yoursite.com/html-builder ↓ localStorage (editing) ↓ POST to […]

🚀 Tagger → Vault Integration Guide

What’s New in Vault v2.0 Your Vault now has complete tagger processing built-in: ✅ Tag group processing (context-aware content) ✅ Archive page generation (categories, tags, dates) ✅ Search index building ✅ Image proxy & collection ✅ FTP deployment with image gathering Total: 1,086 lines (was 530, added 556 lines of tagger processing) Quick Start 1. […]

In the example above the plugin will search for a template in the following locations (in the specified order):

/wp-content/themes/child-theme/templates/default-loop.php
/wp-content/themes/parent-theme/templates/default-loop.php
/wp-content/plugins/shortcodes-ultimate/includes/partials/shortcodes/posts/templates/default-loop.php

Creating custom templates

The

PHP Cheat Sheet

PHP Cheat Sheet The only paths that matter (Homebrew PHP 8.5 + Apache) PHP binary /opt/homebrew/bin/php PHP 8.5 config folder /opt/homebrew/etc/php/8.5/ Extra scanned INI files /opt/homebrew/etc/php/8.5/conf.d/ PHP-FPM main config /opt/homebrew/etc/php/8.5/php-fpm.conf PHP-FPM pool configs /opt/homebrew/etc/php/8.5/php-fpm.d/ yours: /opt/homebrew/etc/php/8.5/php-fpm.d/sandbox.conf Apache vhost file (your php sandbox site) /private/etc/apache2/extra/php-sandbox.local.conf Apache main config /etc/apache2/httpd.conf Apache logs (your sandbox vhost) /private/var/log/apache2/php-sandbox-error_log /private/var/log/apache2/php-sandbox-access_log […]

Categories and Tags

CATEGORIES TAGS

Gitlab – Backup / Update Steps

To update your GitLab instance to version 17.6, follow these steps: Review the Release Notes: Familiarize yourself with the new features, bug fixes, and any deprecations in version 17.6. GitLab check rhel [spiffy-root@spiffydesign ~]$ rpm -E %rhel 9 Cool — RHEL/Alma 9 means you want the .el9 builds. Install targets (in order) 1. gitlab-ee-18.5.5-ee.0.el9 2. […]

Signals Vault – Auth

Auth system complete. Two auth paths, both project-scoped: Path A — AccidAuth (primary) routers/auth.py POST /auth/verify-token — accepts X-Accid-Key + X-Accid-Hash + X-ACCID-App headers Auto-registers on first call (no separate registration step) Project scoping: pass {"project_id": "dragon-lady"} in body — keys accumulate project access on each successful auth GET /auth/key-info — returns registered projects, app, […]

ACCID Scraper Pipeline

+ JSON-noculars Complete System Documentation Version 2.0 — February 11, 2026 What This System Does The ACCID Scraper Pipeline takes any website, extracts its content (text, links, images, navigation), and converts it into a format the ACCID HTML Builder can import. The output is a static HTML site with the original content. No databases, no […]

./ACCID HTML Builder – Technical Overview

JSON Overview What It Is A standalone, client-side HTML page builder. No backend server required for core editing — pages are built in the browser, persisted to localStorage, and exported as static HTML via ZIP download or FTP upload. When served from an ACCID backend (PHP bridge or ACCID Vault), persistence extends to server-side storage. […]

accid banner tester

🎉 ACCID VAULT v2.0 – COMPLETE SYSTEM

ADDITION: See Tagger Integration guide 9 MONTHS IN THE MAKING – IT’S DONE! What You Got: 1. vault_enhanced.py (900+ lines) The complete, production-ready vault with EVERYTHING: ✅ Project Management – Waypoint tutorials – HTML sites – React apps – Unlimited projects from one install ✅ FTP Deployment – Original feature (your 30-line vault) – Now […]

Vault Deployment | 🎯 Clear Architecture: Web vs Desktop

Three Deployment Modes: Mode 1: Pure Web (No Vault Needed) User Browser ↓ https://yoursite.com/html-builder ↓ localStorage (editing) ↓ Browser FTP library (publishing) ↓ User’s FTP server Who: Public users on your siteInstall: NothingVault: Not needed (browser handles FTP) Mode 2: Web + Hosted Vault (Recommended) User Browser ↓ https://yoursite.com/html-builder ↓ localStorage (editing) ↓ POST to […]

🚀 Tagger → Vault Integration Guide

What’s New in Vault v2.0 Your Vault now has complete tagger processing built-in: ✅ Tag group processing (context-aware content) ✅ Archive page generation (categories, tags, dates) ✅ Search index building ✅ Image proxy & collection ✅ FTP deployment with image gathering Total: 1,086 lines (was 530, added 556 lines of tagger processing) Quick Start 1. […]

shortcode supports custom templates, which makes it incredibly powerful. Follow the steps below to create one.

Step 1

Create a new folder in your theme directory and name it su-posts-templates, so the resulting path would be:

/wp-content/themes/YOUR-THEME-NAME/su-posts-templates/

Step 2

Create a new file in the su-posts-templates folder and name it my-template.php. The resulting path would be:

/wp-content/themes/YOUR-THEME-NAME/su-posts-templates/my-template.php

Step 3

Put the following snippet into the created file:

<?php if ( $posts->have_posts() ) : ?>
  <div class="su-posts su-posts-my-template">
    <?php while ( $posts->have_posts() ) : ?>
      <?php $posts->the_post(); ?>
      <a href="<?php%20the_permalink();%20?>"><?php the_title(); ?></a>
    <?php endwhile; ?>
  </div>
<?php else : ?>
  <p>Posts not found!</p>
<?php endif; ?>

Step 4

Now you can use the created template:


Adding custom template paths

If you need to store your templates outside of the theme directory, you can extend the list of allowed template paths. Use the following snippet in a custom plugin or in the functions.php file:

add_filter(
	'su/shortcode/posts/allowed_template_locations',
	function( $locations ) {

		// /wp-content/
		$locations[] = WP_CONTENT_DIR;

		return $locations;

	},
	10,
	1
);

The code above will allow you to store templates under /wp-content/ directory.


Pagination Plugin

https://wordpress.org/plugins/wp-paginate/

Description

LATEST NEWS

WP-Paginate is a simple and flexible pagination plugin which provides users with better navigation on your WordPress site.

In addition to increasing the user experience for your visitors, it has also been widely reported that pagination increases the SEO of your site by providing more links to your content.

You can add custom CSS for your pagination links with the Custom CSS tab in WP-Paginate Settings.

Starting in version 1.1, WP-Paginate can also be used to paginate post comments!

Translations: https://plugins.svn.wordpress.org/wp-paginate/I18n (check the version number for the correct file)

img

FAQ

  • How can I override the default pagination settings?

    The wp_paginate() and wp_paginate_comments() functions each takes one optional argument, in query string format, which allows you to override the global settings. The available options are:

    title – The text/HTML to display before the pagination links

    nextpage – The text/HTML to use for the next page link

    previouspage – The text/HTML to use for the previous page link

    before – The text/HTML to add before the pagination links and title

    after – The text/HTML to add after the pagination links

    empty – Display before markup and after markup code even when the page list is empty

    range – The number of page links to show before and after the current page

    anchor – The number of links to always show at beginning and end of pagination

    gap – The minimum number of pages before a gap is replaced with an ellipsis (…)Y

    ou can even control the current page and number of pages with:

    page – The current page. This function will automatically determine the value

    pages – The total number of pages. This function will automatically determine the value

    Example (also applies to ‘wp_paginate_comments()`)

    <?php if(function_exists('wp_paginate')) { wp_paginate('range=4&anchor=2&nextpage=Next&previouspage=Previous'); } ?>

Github – shortcode w/pagination example

https://gist.github.com/raselahmed7/b8ff6fb24d782c3b2c63

custom-post-loop-with-pagination-shortcode.php

<?php 

function portfolios_shortcode($atts){
	extract( shortcode_atts( array(
		'expand' => '',
	), $atts) );
    
    global $paged;
    $posts_per_page = 6;
    $settings = array(
        'showposts' => $posts_per_page, 
        'post_type' => 'portfolio', 
        'orderby' => 'menu_order', 
        'order' => 'ASC', 
        'paged' => $paged
    );
	
    $post_query = new WP_Query( $settings );	
    
    $total_found_posts = $post_query->found_posts;
    $total_page = ceil($total_found_posts / $posts_per_page);
		
	$list = '<div class="portfolio-item-list">';
	while($post_query->have_posts()) : $post_query->the_post();
		$list .= '
		<div class="single-portfolio-item">
        
		</div>
		';        
	endwhile;
	$list.= '</div>';
    
    if(function_exists('wp_pagenavi')) {
        $list .='<div class="page-navigation">'.wp_pagenavi(array('query' => $post_query, 'echo' => false)).'</div>';
    } else {
        $list.='
        <span class="next-posts-links">'.get_next_posts_link('Next page', $total_page).'</span>
        <span class="prev-posts-links">'.get_previous_posts_link('Previous page').'</span>
        ';
    }
    
	
	return $list;
}
add_shortcode('portfolios', 'portfolios_shortcode');