Developed by Engelhardt Medien, a digital webdesign and graphics agency based in Nuremberg, Germany.
Why this plugin?
FAQPage JSON-LD is generated automatically and tied directly to the block’s mode — no separate schema plugin needed. This structured markup helps AI systems and assistants (ChatGPT, Perplexity, Gemini, and others) understand and surface your content, and gives search engines clean, standards-based context about your page — increasingly important as more traffic is driven by AI-powered search and answers. (Note: Google discontinued its visual FAQ rich-result snippet in Google Search in May 2026; the underlying structured data is still valid, standard, and used elsewhere, e.g. by AI assistants.)EMN FAQ & Accordion Block adds a native Gutenberg block for building expandable question/answer sections. It works in two modes, switchable per block instance (Accordion mode is the default for new blocks):
FAQPage JSON-LD structured data alongside the visible content. This structured data helps AI systems and assistants (such as ChatGPT, Perplexity, and Gemini) understand and surface your content when answering questions related to it, and provides search engines with clean, standards-based context about the page (note: Google discontinued the visual FAQ rich-result snippet in Google Search in May 2026).By default, opening one item automatically closes any other open item in the same block — this can be turned off per block (under the “Type” panel) to allow multiple items to stay open at once. The first item can also be set to already be expanded when the page loads, again on a per-block basis (also in the “Type” panel).
Design controls
Every visual aspect can be adjusted directly in the block editor sidebar, without touching any code:
editor-color-palette / editor-gradient-presets), exactly like core WordPress blocks.Lightweight & fast
Built with no external libraries or frameworks: a small, dependency-free editor script and a compact vanilla-JS frontend script. Nothing is loaded on pages that don’t contain the block, and all output is plain HTML/CSS — no heavy runtime, no bloat, and virtually no impact on page load time. All CSS and JavaScript ships pre-minified and is served minified by default, keeping the amount of data sent to visitors as small as possible (the original, readable source files are also included for transparency and are used automatically instead when SCRIPT_DEBUG is enabled).
Images, iframes (e.g. video embeds), and self-hosted videos placed inside a collapsed answer are automatically served with native lazy-loading attributes (loading="lazy" / preload="none") as a reliable fallback, on top of WordPress core’s own automatic lazy-loading — so media inside FAQ/accordion items that aren’t visible on load don’t block the page. Existing loading/decoding/preload attributes (yours or another plugin’s) are always left untouched. Media inside an item that is set to be open by default is deliberately excluded, so it loads immediately like any other above-the-fold content.
Accessibility
The expand/collapse interaction is built to be fully keyboard-operable and screen-reader-friendly, in line with WCAG 2.1 Level AA for this type of disclosure widget:
role="button" and aria-expanded on the question, aria-controls linking it to its answer, and role="region" with aria-hidden and aria-labelledby (pointing back to its own question) on the answer — all written directly into the server-rendered HTML, not added as an afterthought by JavaScript.aria-hidden, since the open/closed state is already announced through aria-expanded.aria-expanded/aria-hidden state and focusable content) directly in the initial HTML — no reliance on JavaScript running first.No plugin can honestly certify a page as “100% accessible” on its own, since real-world accessibility also depends on the content and colors you choose. What this plugin guarantees on its own is the interaction pattern itself: correct roles/states, full keyboard operability, a visible focus indicator, and screen-reader-friendly markup, matching WCAG 2.1 Level AA for this type of disclosure widget. Final color contrast (text against background, icon against its background) depends on the colors you choose in the block settings — pick sufficiently contrasting colors (a ratio of at least 4.5:1 for normal text) to keep the result compliant with WCAG AA.
Security
All styling attributes are re-validated and rebuilt on the server on every page load — via strict allow-lists for colors, gradients, numeric ranges, and HTML tags — regardless of what is stored in the post content. This prevents malicious or malformed attribute values from ever reaching the page’s HTML or CSS.
Multilingual
.po/.mo files, in line with how WordPress.org-hosted plugins handle translations.wpml-config.xml for WPML compatibility, so only the question text itself is offered for translation — all styling attributes are copied as-is across languages.