Cycle Block – Rotate & Schedule Content Variations
Cycle Block – Rotate & Schedule Content Variations

Cycle Block – Rotate & Schedule Content Variations

0/5 (0 ratings) — active installs Updated Sep 14, 2026
Three versions of one hero, written once and named. Pick the schedule — daily, weekly or monthly — choose shuffle or sequence, repeat or stop on the last one, and preview every variation from the editor without waiting for the clock.

Three versions of one hero, written once and named. Pick the schedule — daily, weekly or monthly — choose shuffle or sequence, repeat or stop on the last one, and preview every variation from the editor without waiting for the clock.

Write several versions of a section once, and let the page show a different one over time.

A testimonial that changes every week. A hero message that rotates each month. A call to action
that differs every day. You write the variations in the block editor, choose how often they
change, and the page takes it from there.

How it works

Add a Cycle block, then add a variation inside it for each version you want. Anything can go
in a variation — headings, images, buttons, columns, other blocks. Pick an interval, and that is
the whole setup.

  • Daily, weekly or monthly rotation.
  • Shuffle, so a full pass shows every variation before any repeats.
  • Sequence, if you want them in the order you wrote them.
  • Repeat, or stop on the last variation once the cycle has run through.
  • Preview from the editor, stepping through every variation without waiting for the schedule
    and without disturbing what visitors see.
  • Unlimited variations per block, and as many blocks as you like per page.

Rendered on the server, which matters more than it sounds

The variation is chosen before the page is sent to the browser. Only one is ever in the HTML.

  • No flicker and no layout shift. Nothing swaps after the page has painted, so the block
    never causes the jump that hurts Core Web Vitals.
  • No hidden duplicate content. Search engines see one variation, not all of them stacked in
    the markup with the rest hidden by CSS.
  • No JavaScript required to choose or display a variation.
  • Nothing is written into your post content, so your saved posts do not change as the
    schedule advances.

Built to behave

  • Every variation is real block content, so it inherits your theme’s colours, typography and
    spacing rather than fighting them.
  • The schedule is tracked per block and per post, so duplicating a page gives the copy its own
    schedule instead of sharing one.
  • If anything goes wrong — a missing schedule, a plugin conflict — the block falls back to
    showing its content rather than breaking the page.
  • Built to WCAG 2.2 AA and fully translatable.

External services

This plugin contacts GhostLabs’ licensing service in exactly one situation: when you start the
upgrade to Cycle Block Pro from the settings screen — by submitting a license key, or by clicking
“Complete upgrade” after a purchase. It sends the license key you entered (or the one-time claim
token from your purchase), this site’s domain name, the plugin’s slug and the edition being
requested, so the service can verify the license and deliver the Cycle Block Pro package. Nothing is sent on any other page
load, and nothing is ever sent without that explicit action.

The service is operated by GhostLabs. Terms of service ·
Privacy policy

Source code

The plugin’s compiled JavaScript is built from readable sources, and both are published
together at:

https://github.com/theghostlab/wp-ghostlabs-cycle-block-lite

That repository contains this plugin exactly as distributed, plus the uncompiled src/ and
dev/ behind its bundles and the configuration used to build them. Every dependency is a
public package, and the one GhostLabs library the plugin uses is carried as readable source
inside it (lib/wp-kit/, GPL-2.0-or-later) — so composer install && pnpm install && pnpm run
build
needs no credentials of any kind and reproduces the shipped build/, assets/js/ and
assets/css/settings.css byte for byte.