Core Forms 4.3.0-beta1
Pre-release. Real installs continue to update to 4.2.10 — opt in to this beta only on staging.
Polls rework
Schema migration (cf_db_version → 4.3.0), tabbed editor, Gutenberg block, REST API, analytics screen, CSV export, hourly auto-close cron, accessibility pass, and a full vote-integrity rewrite.
Editor
- Tabbed editor (Question / Settings / Schedule / Embed / Results) replaces the metabox screen
- Drag-to-reorder options, Duplicate row action, "Other" write-in toggle, dedicated type selector (single vs. multiple)
Vote integrity
- Every vote now stores a
voter_hash(poll + IP + UA + cookie + user) and dedupe queries against that single column regardless of mode - Cookie set on render with
SameSite=Lax; Secure; HttpOnly; AJAX requests persist a fresh cookie too (was previously broken because admin-ajax doesn't firesend_headers) vote_limit=userrejects anonymous voters at submit (was silently letting them vote unlimited times)- Honeypot field on by default; per-IP rate limit (12 votes/minute) covers both real submits and honeypot trips
- Hourly
cf_poll_auto_closecron flipsstatusto closed once the end time passes
Frontend & block
core-forms/pollGutenberg block (no-build, vanilla JS) — picker dropdown + display-mode (auto / results-only / form-only); server-render shares code with the shortcode- Result styles: bar (default), columns, percent-only
- Optional live results polling (15 s, opt-in per poll; pauses while tab is hidden)
- Optional change-vote window (per-poll, in minutes) — re-renders the form pre-checked
- Accessible markup:
<fieldset><legend>,role="progressbar"witharia-valuenow,role="status" aria-live="polite", focus moves to result heading on submit, respectsprefers-reduced-motion
Results & analytics
- REST:
GET /cf/v1/polls/{id}/results(public),GET /cf/v1/pollsand/polls/{id}and/polls/{id}/analytics(auth) - Per-poll analytics screen with totals, unique voters, 30-day SVG line chart, option breakdown
- CSV export of raw votes (option label, value, voter_hash, IP, user, voted_at, referrer)
JS
- Removed jQuery from the poll frontend and admin scripts
Schema migration
Adds type, starts_at, allow_other, post_close_behavior, redirect_url, enable_live_results, change_vote_window to wp_cf_polls. Adds option_value, voter_hash, referrer to wp_cf_poll_votes plus a (poll_id, voter_hash) composite index. Existing rows are backfilled so historical dedupe keeps working.
Known follow-ups for stable 4.3.0
- Donut style currently falls back to bar rendering (CSS hook exists)
- Image-option polls / NPS / rating types are deferred to 4.4.0