Q Quikdin · Dinova Post Nav
Vol. I — Issue No. 1 · A Quikdin publication
Quikdin / Plugins v1.0.0 For Divi 4 + Divi 5

01Pagination · Read More · Post Nav

The end of Older / Newer Entries.

A focused plugin that replaces Divi's three stale navigation surfaces with modern, configurable, accessible ones — no jQuery, no telemetry, no fluff.

5
Pagination modes
3
Single-post nav layouts
0
jQuery on the frontend
D4 + D5
Render paths supported

§ 01Three pillars

What it does, end to end.

P. 02

01 — Read More

Smart Continue Reading

Rewrite, hide, or per-post-override the Read More link on every Divi Blog, Posts, and Blog Extras module — and optionally on stock WordPress archives that don't go through Divi at all.

  • Global text override
  • Per-post meta-box override
  • "Hide entirely" mode for tile grids
  • Extra CSS class field
  • Background, text, padding, radius
  • Opt-in for native WP archives
02 — Pagination

Five modern pagers

Replace Divi's two-link "Older / Newer Entries" with a real pager. Five modes; every mode renders inside the Divi Blog module and on stock WP archives that bypass the Blog module entirely.

  • Numbered
  • Numbered + Prev/Next
  • Prev/Next only
  • Load More (AJAX)
  • Infinite Scroll (AJAX)
  • JSON-LD BreadcrumbList microdata
03 — Single Post Nav

Three card layouts

Three modern replacements for the stock "Previous post / Next post" links at the bottom of every article. Auto-injected on stock single.php; replaced inline where the Divi Post Nav module is used.

  • Card with thumbnail
  • Card minimal (no image)
  • Text-only row
  • Optional category chip
  • Optional reading-time estimate
  • Same-category restriction

§ 02Pagination modes

Pick the rhythm that fits.

P. 03

Numbered

qdpn_pagination_mode = numbered

The classic — every page is a click away with sensible mid-size and end-size collapsing. Microdata included.

1 2 3 4 5 12

Numbered & Prev/Next

numbered_prev_next

Numbers framed by directional controls. Keyboard left/right also advances pages when the pager has focus.

« 1 2 3 8 »

Prev/Next only

prev_next_only

Minimal, two-direction nav. Good for editorial sites where the count of total pages is not the message.

← Previous Page 3 / 12 Next →

Load More AJAX

load_more

A single button fetches the next page over REST and appends. Nonce-verified. Per-IP rate limited. Graceful no-JS fallback.

Load More Posts
Showing 6 of 24 posts

Infinite Scroll AJAX

infinite_scroll

IntersectionObserver triggers loads as the reader scrolls. Respects prefers-reduced-motion. Switches to a manual button after a configurable auto-load cap so people can still see the footer.

↑ back to top auto-loading…
12 of 47 posts · 3 auto-loads remaining

§ 03Single-post navigation

Three ways to keep reading.

P. 04

Mode 01 card_thumb

Card with thumbnail

Featured image, category chip, title, optional "N min read." Mobile-stacks below 640 px.

← Previous Post How we picked Fraunces over the obvious sans
Next Post → Why your blog needs a real pager
Mode 02 card_minimal

Card minimal

All the structure of the thumbnail variant, none of the imagery. Cleaner for editorial sites without featured images.

← Previous Post A field guide to better blog pagination
Next Post → Read-More buttons that survive Divi updates

§ 04Under the hood

Built carefully, not quickly.

P. 05

01

Divi 4 + Divi 5

Both render paths supported in one codebase. D4 shortcode filters, D5 native-block wrapper filters — auto-detected, no settings toggle.

02

REST + nonce + rate limit

AJAX modes ride a custom REST endpoint with wp_rest nonce verification and a hashed-IP 60-req/min cap. HTTP 429 with Retry-After when over.

03

WPML & Polylang

Every translator-facing option is registered with the WPML string registry and piped through wpml_translate_single_string on output. Translation .pot ships in the box.

04

Accessibility-first

Real <nav> elements with aria-label. Live regions for progress. Focus on the first newly-loaded post. prefers-reduced-motion honored.

05

Theme Builder ready

Detects the Post Nav module across post content and all enabled Theme Builder body / header / footer layouts — auto-injection only fires when nothing else will render.

06

Multisite-aware uninstall

Deletes every option, post meta, AJAX context transient, rate-limit counter and the debug log on every site in the network. Database left clean.

§ 05For developers

Extend without forking.

P. 06

One filter. Three lines. Your own list of modules to target.

The plugin exposes a public filter for every place its assumptions might bite. Need it to also rewrite Read More on a third-party post-listing module? Add its render slug.

Filters live in their own namespace, are versioned, and ship with proper docblocks. No magic, no global state.

See all filter hooks
php · functions.php qdpn_blog_module_slugs
/**
 * Also rewrite Read More on a custom post-listing module.
 */
add_filter( 'qdpn_blog_module_slugs', function ( $slugs ) {
    $slugs[] = 'my_custom_blog_module';
    return $slugs;
} );

// Inspect what the plugin sees on the current request:
add_action( 'wp_footer', function () {
    if ( current_user_can( 'manage_options' ) ) {
        echo '<!-- modules: '
            . esc_html( implode( ', ',
                \Quikdin\DinovaPostNav\DIVI\Divi\DiviCompat::get_blog_module_slugs()
            ) )
            . ' -->';
    }
} );

§ 06Frequently asked

Questions answered.

P. 07

01 Does it conflict with Divi's own Blog-module settings? +
No. Where Divi already exposes a knob (for example "Show Read More button" on the Blog module), the Divi setting takes precedence. The plugin only acts on output Divi has already produced — it never overrides editor intent.
02 Does pagination work inside Theme Builder archive templates? +
Yes. The plugin filters on both the module-level shortcode output and the layout-level renders (the_content, et_builder_render_layout) so Theme Builder body templates are covered the same way regular pages are.
03 Will AJAX modes break without JavaScript? +
The Load More button and the Infinite Scroll fallback both render an underlying <noscript> link to the next page, so visitors without JavaScript see standard pagination instead of a dead button. Infinite Scroll also disconnects its observer and exposes a real button when prefers-reduced-motion is set.
04 What happens to my settings on uninstall? +
uninstall.php removes every qdpn_* option, the per-post Read More override post meta, the AJAX context blobs and rate-limit counters, and the debug log file. On a multisite network, the cleanup runs against every site.
05 Is there a debug mode? +
Yes — opt-in only. Add define( 'QDPN_DEBUG_LOG', true ); next to your WP_DEBUG constant in wp-config.php and the plugin will write to wp-content/qdpn-debug.log. Without that constant, nothing is written, even when WP_DEBUG is on.
06 Does the plugin track me or my visitors? +
No. No analytics, no telemetry, no remote calls. The only network traffic the plugin generates is the same-origin REST request for AJAX pagination, which only fires when a reader clicks Load More or scrolls past the infinite-scroll trigger.

Ready to ship

Better navigation, in less than five minutes.

v1.0.0 · GPLv2 or later · WP 6.0+ · PHP 7.4+ · Divi 4.x & 5.x