Digital Sovereignty for everyone

Changelog

1.0.12 (current, unreleased)

  • Added open/close messaging: informational _lh_polls_opens_at / _lh_polls_closes_at fields in Poll Settings. When a poll is closed, the front-end notice now explains when voting opens/closes rather than a bare “closed” message. Purely informational โ€” never auto-triggers opening or closing, which remains the manual “Closed” checkbox.

1.0.11 โ€” 2026-09-05

  • Split the LH_Polls_Post_Types god class: metabox render/save logic extracted into dedicated LH_Polls_Settings_Metabox, LH_Polls_Options_Metabox, LH_Polls_Votes_Metabox, and LH_Polls_Admin_Notices classes. Post_Types is now trimmed to CPT/meta-box registration, the shared should_save_poll_meta() save guard, delete cleanup, and publish validation. Pure relocation, no behavioural change.
  • Fixed PCP-flagged PreparedSQL.NotPrepared / DirectDB.UnescapedDBParameter warnings in class-lh-polls-db.php and class-lh-polls-embed.php by using $wpdb->prepare()’s %i identifier placeholder for table names (WP 6.2+) instead of string-concatenating self::options_table()/votes_table() into the query. Genuine fix, not a suppression.
  • Documentation migrated from readme.md into this portfolio entry per the lh-portfolio convention: Database schema and Admin interfaces sections expanded; new Architecture notes, MCP abilities, and PCP notes (accepted false positives) doc-sections added. readme.md trimmed to the minimal spec (description, install, links). readme.txt added (plugin is now public).
  • Portfolio root entry created and set to public (publish) โ€” ecosystem-useful polling plugin, no LocalHero-specific data structures.

1.0.10 โ€” 2026-07-13

  • lh-polls-resize (the postMessage iframe-resize listener) is now registered with an explicit strategy => ‘defer’ (WP 6.3+ script strategy API) instead of a bare in_footer bool, matching the non-blocking loading pattern used by the rest of the LH plugin suite. The script is only enqueued on pages with a published poll block, so this is a small consistency/perf fix, not a scoping change.

1.0.9 โ€” 2026-06-15

  • Removed three redundant core metaboxes from the lh_poll edit screen via remove_meta_box() in add_meta_boxes(): slugdiv (permalink/slug โ€” not user-facing for polls), commentstatusdiv and commentsdiv (comments UI โ€” polls use wp_comments internally for vote storage as lh_vote type, but the standard comments interface is inappropriate and confusing here).

1.0.8 โ€” 2026-06-15

  • Registered all four lh_poll post meta keys via register_post_meta() for type-hardening and REST schema visibility: _lh_polls_allow_multiple (boolean), _lh_polls_voting_closed (boolean), _lh_polls_reminder_template_id (integer), _lh_polls_required_voters (array of integers, with explicit show_in_rest schema). All four have auth_callback checking edit_post on the post ID.
  • lh-polls/get-poll MCP ability now returns required_voters and reminder_template_id alongside the existing fields.

1.0.7 โ€” 2026-06-15

  • Reverted to fully classic poll management after repeated Gutenberg-panel issues (editor not loading, broken useEntityProp meta access, panel placement problems). lh_poll is back to classic metaboxes for everything.
  • Replaced the lh_poll_closed custom post status (and its bundled WP Statuses dependency) with _lh_polls_voting_closed post meta and a Closed checkbox. Voting-open/closed is now independent of post_status.
  • Removed includes/wp-statuses/ entirely โ€” no longer needed without a custom post status.

1.0.6 โ€” 2026-06-08

  • Removed blocks/lh-polls/admin.js and its manual ‘#wp-statuses-dropdown’ injection workaround, now redundant with WP Statuses’ native dropdown support.

1.0.5 โ€” 2026-06-08

  • Bundled WP Statuses (imath, v2.1.9), guarded with class_exists(‘WP_Statuses’). Added show_in_metabox_dropdown / show_in_inline_dropdown to the lh_poll_closed status registration.

1.0.4 โ€” 2026-06-08

  • Removed auto-publish-on-parent-publish logic (too messy). Draft polls embedded via the block now show ‘(Draft)’ with a warning in the editor, and ‘This poll is not yet published.’ with an Edit poll link on the front end.

1.0.3 โ€” 2026-06-08

  • Fixed poll-picker ‘or’ label visibility. Added (then later removed in 1.0.4) auto-publish for embedded draft polls on parent-post publish.

1.0.2 โ€” 2026-06-08

  • Moved the ‘Edit poll’ link placement in the block inspector panel; clarified ‘Create new poll’ button labelling.

1.0.1 โ€” 2026-06-08

  • Added ‘Create new poll’ and ‘Edit poll’ actions to the Poll block’s inspector panel.

1.0.0 โ€” 2026-06-08

  • Initial release. lh_poll public CPT with permalinks under /poll/{slug}/. Options in {prefix}lh_poll_options, votes in {prefix}lh_poll_votes with UNIQUE KEY (option_id, user_id).
  • Every vote backed by a wp_comments row of type lh_vote. Single/multiple-choice voting, change-vote support for single-choice polls.
  • Embedding via oEmbed iframe, zero theme dependency for the embed view; standalone singular view via the_content filter.
  • Full transient caching of read queries, flushed on write via LH_Polls_DB::flush_poll_cache().
  • Required voters list with email resolution, reminder emails via bp-email templates with token replacement.
  • MCP abilities: lh-polls/list-polls, lh-polls/get-poll, lh-polls/get-votes.
  • Multisite support: per-site tables, network activation loop, wpmu_new_blog hook.

If you like this plugin please consider making a donation to further development

Install LHero.org

lhero.org

Open it straight from your home screen, full screen and quicker to load.

  1. Tap the Share button . If you cannot see it, tap โ€ขโ€ขโ€ข first.
  2. Scroll down and tap Add to Home Screen.
  3. Tap Add.
  1. Tap the browser menu โ‹ฎ.
  2. Tap Install app or Add to Home screen.
  1. In the menu bar, choose File, then Add to Dock.

Use your browser's menu to install this site or add it to your home screen.