Trending Now 1.0.0
First release. A server-rendered Trending Now link block aggregated from owned WordPress sites and GDELT news, plus a paginated /trending/ archive — built for crawl discovery.
Implements docs/trending-now-plugin-spec.md in full: Phase 1 plus the Phase 2 hub/spoke work.
Install
Download trending-now-1.0.0.zip and install via Plugins → Add New → Upload Plugin. Action Scheduler is bundled, so no Composer step is needed.
From source:
git clone git@github.com:advision-development/trending-now-plugin.git trending-now
cd trending-now && composer install --no-devRequires WordPress 6.4+, PHP 8.1+, MySQL 5.7+ / MariaDB 10.3+.
Highlights
- Four source providers —
wp_rest,rss,gdelt,hub— behind one interface. - URL normalization collapses tracking parameters,
www, trailing slashes and scheme into a single dedupe identity. - Three-tier rotation with an exposure floor, so a burst of new posts cannot crowd out yesterday's before they are crawled.
- Server-rendered only, from a no-expiry option cache: a warm request costs one query and zero outbound HTTP.
- Shortcode, Gutenberg block and template tags over one renderer; theme-overridable templates.
- HMAC-signed REST trigger with skew, replay and rate-limit protection.
- Diagnostics panel built for the silent-failure case, plus a stored-items browser with filtered deletion.
- Optional WP-CLI; nothing depends on it.
Verified on WordPress 6.9 / PHP 8.3
Fresh install from this zip: table and indexes created, secret generated, Action Scheduler active, all three admin tabs clean, REST routes registered, empty state renders nothing. Full cycle end to end through the queue; uninstall verified both with and without delete_data_on_uninstall.
Known gaps
- Elementor and Bricks untested against those plugins; the shortcode path they both use is exercised.
- Hub/spoke not run end to end between two installs —
/itemsmode gating and auth are tested. - No W3C validation run. The inlined
<style>sits in the body by design; the README explains how to move it. - GDELT's malformed-JSON branch covered by inspection only.
Operational note: GDELT routinely takes 10s+ and rate-limits with 429. The default http_timeout of 5 seconds cannot reach it — raise it if you configure a GDELT source.
Full detail in CHANGELOG.md.