Skip to content

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 08 Aug 08:34
· 1 commit to main since this release
8366cde

Compatibility release for current Elementor and Elementor Pro (tested up to 4.2.2),
plus a hardening pass on the lazy-load endpoint. Read the breaking changes before
updating
— the widget's DOM changed.

Breaking

  • The widget's DOM gained a wrapper and can now lose one. All of its styling moved
    onto a new .e-taxonomy-loop element that sits between Elementor's widget wrapper
    and the term sections, and the widget now honours Elementor's Optimized Markup
    setting the way core widgets do. Two things follow for custom CSS:

    • On sites with Optimized Markup enabled, .elementor-widget-container is no longer
      rendered for this widget. CSS naming it must move to .e-taxonomy-loop.
    • CSS using a direct-child combinator through the old structure (for example
      .elementor-widget-container > .taxonomy-posts) no longer matches, because
      .e-taxonomy-loop now sits in between.

    Every class the widget itself emits — .taxonomy-posts, .term-content,
    .term-title, .posts-list, .divider, .not-found — is unchanged.

  • The widget now lives under its own Beenacle category in the editor panel
    instead of General. Existing widgets keep working; only the panel section moved.

  • Configuration errors ("Invalid taxonomy selected", "Please select a valid loop
    template") render in the editor only. Visitors see nothing instead of a red error box.

  • The lazy-load AJAX request now sends post_id / element_id / term_id and no
    nonce. Anything that hooked or proxied the old payload needs updating.

Fixed

  • .posts-list { margin-top: 10px } shipped unscoped and applied to any element on
    the site with that class, not just this widget's.
  • Lazy loading broke on cached pages. The nonce was baked into the cached HTML, went
    stale, and every deferred term failed with "Unable to load posts for this term".
    Since the endpoint only returns already-public markup and now derives every setting
    server-side, the nonce is gone and the failure mode with it.
  • Lazy-rendered terms silently capped at 100 posts while eagerly-rendered terms did
    not, so Posts Per Term = -1 produced inconsistent output within one widget. Both
    paths now honour the setting identically.
  • A crafted AJAX request could render any elementor_library post as the loop
    template, including drafts and private templates. The endpoint no longer accepts a
    template ID — it reads the one saved on the widget.
  • Only \Exception was caught around the Loop Grid render, so a PHP \Error from
    Elementor Pro took down the whole page. \Throwable is caught now, and a failed
    render can no longer leave an output buffer open.
  • Lazily-injected Loop Grids could arrive unstyled when every eagerly-rendered term
    happened to be empty, because Elementor Pro's grid stylesheet had never been
    enqueued. The widget now preloads it when lazy loading is on.

Added

  • Max Terms control, to cap how many terms a widget renders. The term query was
    previously unbounded, which is rough on taxonomies with hundreds of terms.
  • Title HTML Tag control (h1h6, div, p, span). The term title was
    hard-coded to <h2>, which forced a heading level on every layout.
  • Post Count ordering for terms and Last Modified ordering for posts.
  • Requirement checks for Elementor, Elementor Pro and PHP, each with a single
    actionable admin notice shown only to users who can act on it.
  • Three filters for extending the widget without forking it:
    elementor_taxonomy_loop_terms_args, elementor_taxonomy_loop_posts_args and
    elementor_taxonomy_loop_lazy_style_handles.
  • Plugin icons, so the update screen shows the plugin's own icon, and a
    Tested up to header so WordPress stops flagging it as untested.
  • languages/elementor-taxonomy-loop.pot translation template, regenerated with
    php bin/make-pot.php.
  • CHANGELOG.md, which the release workflow now uses for release notes.

Changed

  • Ready for Elementor's optimized DOM. Elementor's developer documentation tells
    add-ons to stop relying on .elementor-widget-container, and core's
    common-optimized control stack is marked to become the only one. The 1.x widget
    hung its stylesheet and eight style controls off that element, which worked only
    because Elementor still defaults third-party widgets to rendering it. The widget now
    implements has_widget_inner_wrapper() exactly as core widgets do — tracking the
    site's Optimized Markup setting — and styles itself through .e-taxonomy-loop, which
    is present either way. Nothing looks different today; it just stops depending on an
    element Elementor is retiring.
  • Rewritten as namespaced classes (Beenacle\ElementorTaxonomyLoop\…) behind a
    small autoloader, and the whole plugin now passes the WordPress PHP_CodeSniffer
    standard plus PHPCompatibility for PHP 7.4–8.4. CI enforces both.
  • The lazy-loader script is only enqueued when Lazy Load Terms is on.
  • Editor panel search now matches many more terms (category, tag, grid, archive,
    WooCommerce, product category, …).
  • The Loop Skin control falls back to a plain template-ID field if Elementor Pro
    ever renames its template query control, instead of fatalling the editor.

Full Changelog: v1.2.2...v2.0.0