Skip to content

Trending Now 1.0.0

Choose a tag to compare

@ivanmorales ivanmorales released this 06 Aug 20:51
· 94 commits to main since this release

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-dev

Requires 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 — /items mode 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.