4.3.4
Two performance memoisations and three UX improvements layered on top of the 4.3.3 bug fixes. No breaking changes, no migrations.
Performance
cf_get_form()is request-scoped memoised. The same form requested multiple times per page (block render,get_html, action loop, analytics tracker) no longer re-fetches the post + meta and rebuilds the settings/messages arrays. Each call returns acloneso future callers can’t poison the cached instance with property mutations. Invalidation:save_post_core-form(always) and*_post_metahooks gated onget_post_type()so other CPT meta touches don’t trash the cache.cf_count_form_submissions()is request-scoped memoised. The forms list table called this per-row — a 50-form admin issued 50COUNT(*)queries; now it issues one per(form_id, is_spam)pair and the rest are cache hits. Invalidated oncf_submission_inserted.
UX
- Block-editor preview skeleton. The Gutenberg block preview shows an animated shimmer skeleton (title bar → input rows → submit button) while
ServerSideRenderis fetching, instead of a bare spinner. Respectsprefers-reduced-motion. - Cleaner form picker. The block’s form-picker dropdown shows just the form title instead of \”Title (slug)\” — much cleaner when titles are distinct. The slug is still surfaced via the Edit Form deep link beneath the picker.
/keyboard shortcut on the forms list. Press/orsto focus the search box. Standard list-UI shortcut (GitHub, GitLab, Linear, every modern dashboard). Skipped when an input, textarea, or contenteditable already has focus so it never hijacks typing.
4.3.3 fixes are intact
- The
wp_cf_submission_repliestable self-heal and the un-spam action-replay parity from 4.3.3 are untouched — verified 10 call sites still wired.
Upgrade notes
- No data or schema migrations.
- No breaking API changes.
- The cache-invalidation hooks are guarded with
function_exists('add_action')to match the existing convention infunctions.php, so the file remains autoload-safe for standalone test environments.
Verified
- 151 unit tests pass.
- PHPStan reports no errors.
- Production zip ships at 815 KB with no test framework, no PHPStan, no
composer.json. block-form.jsrebuilt; bundle still containswp.serverSideRenderand the newcf-block-skeletonstyles.