Repository navigation
v3.0.0
FAQ JSON-LD Manager 3.0.0 fixes all 15 findings from the recent code audit (#27–#41, landed in #42). It is a major release because several behaviours change in ways that can affect existing sites. Read Upgrading to 3.0 before you update.
Upgrading to 3.0
Requirements
- The plugin header now declares WordPress 6.5+ and PHP 7.2+. WordPress will not activate the plugin on older versions.
Output changes
- Answers no longer pass through
the_content. Shortcodes, embeds and otherthe_contentfilters in FAQ answers no longer render. To change the text, use the newfqj_answer_textandfqj_question_textfilters. - The output type is always
FAQPage. TheFAQSectionoption is removed because it was never valid schema.org. A storedfaqsectionsetting is converted automatically. - JSON-LD is printed on singular views only (single posts, pages and CPT entries). Archives, the home page and search results no longer get FAQ markup.
Developer-facing removals
- The
FQJ_DB_TABLEconstant is removed. Callfqj_table_name()instead. - The unused
queue_cron_intervalsetting is removed. - Cached output transients are now keyed
fqj_faq_json_{generation}_{post_id}. If code reads the old keys, update it. - The three admin AJAX lookups now require the
edit_postscapability.
Uninstall
- Deleting the plugin now removes everything it stores: options, tables, transients and cron hooks, on every site of a multisite network.
- FAQ posts are kept by default. Deleting them is opt-in: return
truefrom thefqj_uninstall_delete_faqsfilter.
Automatic migration
- On upgrade, the plugin does three things automatically:
- It creates the new
{prefix}fqj_queuetable (DB version 2). - It migrates any pending transient queue into that table.
- It normalizes settings and purges cached output (data version 2).
- It creates the new
- You don't need to do anything. If you run a persistent object cache, the new cache-generation key means a "Purge all" now takes effect there too.
Highlights
- Faster, safer invalidation.
- The queue now lives in its own table.
- Post-type and term mappings are expanded a batch at a time by the cron worker, not when you save.
- The cron event reschedules itself if it goes missing.
- More correct cache invalidation.
- Caches are invalidated when an FAQ's status, title or content changes, whatever the save path (Trash, Quick Edit,
wp_update_post). - Caches are also invalidated when mappings are removed, and when a post's terms or permalink change.
- Caches are invalidated when an FAQ's status, title or content changes, whatever the save path (Trash, Quick Edit,
- Safer output.
- Question and answer text is entity-decoded and whitespace-normalized.
- The JSON is encoded with
JSON_HEX_TAG | JSON_HEX_AMP, so FAQ text can't close the<script>tag.
- Multisite. Network activation sets up every site, and sites created later are set up automatically.
- Admin.
- Select2 is bundled locally, and the plugin reuses an existing
select2/selectWoohandle if WooCommerce or another plugin has one. - "By Posts" search covers all public post types.
- The meta box keeps each association type's selections when you switch between types.
- The batch size is capped at 5000.
- Select2 is bundled locally, and the plugin reuses an existing
- i18n. All PHP and JS strings are translatable under the
faq-jsonldtext domain. - Release zip. The zip is built with
git archiveand checked against an allow-list, so dev files never ship.
What's Changed
- ci: bump the github-actions group with 5 updates by @dependabot[bot] in #21
- deps-dev: bump the composer group with 2 updates by @dependabot[bot] in #20
- deps-dev: bump jquery from 3.7.1 to 4.0.0 in the npm group by @dependabot[bot] in #22
- Add Claude Code cloud SessionStart hook by @renderbit-technologies in #25
- Add Cloud Agent development environment by @renderbit-technologies in #26
- Fix code audit findings #27–#41 by @renderbit-technologies in #42
- Remove unused output type lookup from the frontend printer by @renderbit-technologies in #43
- Release v3.0.0 by @soham2008xyz in #44
New Contributors
- @dependabot[bot] made their first contribution in #21
Full Changelog: v2.3.0...v3.0.0