{"id":365599,"date":"2026-09-14T16:49:19","date_gmt":"2026-09-14T16:49:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/speak-input-voice-dictation-for-acf\/"},"modified":"2026-09-14T16:48:58","modified_gmt":"2026-09-14T16:48:58","slug":"speak-input-voice-dictation-for-acf","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/speak-input-voice-dictation-for-acf\/","author":23555591,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.5","stable_tag":"1.0.5","tested":"7.1","requires":"6.0","requires_php":"8.2","requires_plugins":null,"header_name":"Speak Input - Voice Dictation for ACF","header_author":"Clemente Moraleda","header_description":"Adds voice dictation to Advanced Custom Fields (ACF) text and textarea fields \u2014 record, then review the transcript. WYSIWYG field support is included with Pro.","assets_banners_color":"455d70","last_updated":"2026-09-14 16:48:58","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/speakinput.com","header_author_uri":"https:\/\/speakinput.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.5":{"tag":"1.0.5","author":"cmoraleda","date":"2026-09-14 16:48:58","revision":3695615}},"upgrade_notice":{"1.0.0":"<p>Initial release of Speak Input - Voice Dictation for ACF.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3695595,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3695595,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3695595,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3695595,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.5"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3695595,"resolution":"1","location":"assets","locale":"","width":2556,"height":1302},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3695595,"resolution":"2","location":"assets","locale":"","width":2540,"height":1300},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3695595,"resolution":"3","location":"assets","locale":"","width":2556,"height":1262},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3695595,"resolution":"4","location":"assets","locale":"","width":2540,"height":1304},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3695595,"resolution":"5","location":"assets","locale":"","width":2558,"height":1300}},"screenshots":{"1":"Settings &gt; Speak Input ACF \u2014 API keys and general settings.","2":"The \"Speak Input\" tab in an ACF field's own settings, where dictation is enabled per field.","3":"The microphone button and level meter on a <code>text<\/code> field.","4":"Voice dictation settings in a <code>wysiwyg<\/code> field (Pro).","5":"The Diagnostics log (Pro) \u2014 a record of transcription attempts, without any dictated content."}},"plugin_section":[],"plugin_tags":[1953,2211,23578,20217,4013],"plugin_category":[34,59],"plugin_contributors":[280698],"plugin_business_model":[],"class_list":["post-365599","plugin","type-plugin","status-publish","hentry","plugin_tags-accessibility","plugin_tags-acf","plugin_tags-dictation","plugin_tags-speech-to-text","plugin_tags-voice","plugin_category-accessibility","plugin_category-utilities-and-tools","plugin_contributors-cmoraleda","plugin_committers-cmoraleda"],"banners":{"banner":"https:\/\/ps.w.org\/speak-input-voice-dictation-for-acf\/assets\/banner-772x250.png?rev=3695595","banner_2x":"https:\/\/ps.w.org\/speak-input-voice-dictation-for-acf\/assets\/banner-1544x500.png?rev=3695595","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/speak-input-voice-dictation-for-acf\/assets\/icon-128x128.png?rev=3695595","icon_2x":"https:\/\/ps.w.org\/speak-input-voice-dictation-for-acf\/assets\/icon-256x256.png?rev=3695595","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/speak-input-voice-dictation-for-acf\/assets\/screenshot-1.png?rev=3695595","caption":"Settings &gt; Speak Input ACF \u2014 API keys and general settings."},{"src":"https:\/\/ps.w.org\/speak-input-voice-dictation-for-acf\/assets\/screenshot-2.png?rev=3695595","caption":"The \"Speak Input\" tab in an ACF field's own settings, where dictation is enabled per field."},{"src":"https:\/\/ps.w.org\/speak-input-voice-dictation-for-acf\/assets\/screenshot-3.png?rev=3695595","caption":"The microphone button and level meter on a <code>text<\/code> field."},{"src":"https:\/\/ps.w.org\/speak-input-voice-dictation-for-acf\/assets\/screenshot-4.png?rev=3695595","caption":"Voice dictation settings in a <code>wysiwyg<\/code> field (Pro)."},{"src":"https:\/\/ps.w.org\/speak-input-voice-dictation-for-acf\/assets\/screenshot-5.png?rev=3695595","caption":"The Diagnostics log (Pro) \u2014 a record of transcription attempts, without any dictated content."}],"raw_content":"<!--section=description-->\n<p>Speak Input adds a microphone button to Advanced Custom Fields (ACF) so editors \u2014 and, where you allow it, front-end visitors \u2014 can dictate instead of type, in the WordPress admin or in any front-end form built with <code>acf_form()<\/code>.<\/p>\n\n<p>Click the microphone, speak, click again to stop. The recording is sent to your chosen speech-to-text engine and the transcript is inserted into the field a moment later \u2014 nothing is transcribed live while you speak, and nothing leaves your site until you stop recording.<\/p>\n\n<h4>Free<\/h4>\n\n<ul>\n<li>Voice dictation for <code>text<\/code> and <code>textarea<\/code> fields.<\/li>\n<li><a href=\"https:\/\/deepgram.com\/\">Deepgram<\/a> as the transcription engine, using your own free Deepgram API key.<\/li>\n<li>A dedicated \"Speak Input\" tab in every ACF field's settings, so you choose exactly which fields get a microphone button \u2014 off by default.<\/li>\n<li>Keyterm prompting: give Deepgram a list of names, jargon or product terms it should listen for.<\/li>\n<li>Dictation language follows the editor's browser language automatically.<\/li>\n<li>Works in the admin and in front-end forms built with <code>acf_form()<\/code>, including for anonymous visitors, with a configurable request limit to protect your API usage.<\/li>\n<\/ul>\n\n<h4>Speak Input Pro<\/h4>\n\n<p>Pro unlocks:<\/p>\n\n<ul>\n<li>Dictation for <code>wysiwyg<\/code> (rich text) fields, in addition to <code>text<\/code> and <code>textarea<\/code>.<\/li>\n<li>A second transcription engine, OpenAI, selectable alongside Deepgram.<\/li>\n<li>Insertion modes per field: replace the whole field, append, insert at the cursor, or replace only the current selection.<\/li>\n<li>A configurable recording time limit per field.<\/li>\n<li>A site-wide and per-field context prompt (used by the OpenAI engine) to improve accuracy for names, jargon or the topic of your site.<\/li>\n<li>A fixed dictation language per field, with automatic WPML awareness.<\/li>\n<li>A diagnostics screen: a log of transcription attempts (engine, result, timing) to help you troubleshoot and, if needed, share with support \u2014 never your dictated text or audio, only metadata.<\/li>\n<li>Priority email support.<\/li>\n<\/ul>\n\n<p>Find current Pro pricing and upgrade at <a href=\"https:\/\/speakinput.com\/advanced-custom-fields\/\">speakinput.com\/advanced-custom-fields<\/a>.<\/p>\n\n<p><em>\"Speak Input Pro\" is this plugin's own paid tier \u2014 a separate product from \"Advanced Custom Fields PRO\", the plugin this add-on extends. Speak Input, Free or Pro, works with either the free or the PRO version of Advanced Custom Fields.<\/em><\/p>\n\n<h4>Supported field types<\/h4>\n\n<ul>\n<li>Text<\/li>\n<li>Textarea<\/li>\n<li>WYSIWYG (rich text editor) \u2014 Pro<\/li>\n<\/ul>\n\n<h4>Transcription engines<\/h4>\n\n<ul>\n<li><a href=\"https:\/\/deepgram.com\/\">Deepgram<\/a> \u2014 Free and Pro. Requires your own Deepgram API key (a free tier is available).<\/li>\n<li>OpenAI (<code>gpt-transcribe<\/code>) \u2014 Pro only. Requires your own OpenAI API key.<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>Speak Input does not store your dictated audio. Recorded audio is sent to your chosen transcription engine for the sole purpose of producing a transcript, and is not retained by this plugin afterwards.<\/p>\n\n<p>With Speak Input Pro, an optional diagnostics log records metadata about each transcription attempt \u2014 which engine was used, whether it succeeded, an error code if it failed, and how long it took \u2014 to help you troubleshoot issues or share details with support. This log never contains your dictated text or audio. It is stored in your own site's database, has a configurable retention period, and can be cleared at any time from Settings &gt; Speak Input ACF &gt; Diagnostics.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>Speak Input sends data to the following third-party services on your behalf. These calls only happen when you actively record and submit a dictation, or when the plugin checks your license \u2014 nothing is sent automatically or in the background.<\/p>\n\n<ul>\n<li><strong>Deepgram<\/strong> \u2014 when Deepgram is your selected engine, your recorded audio is sent to Deepgram's API (using the API key you provide in Settings) to be transcribed, and the resulting text is returned to your site. <a href=\"https:\/\/deepgram.com\/terms\">Deepgram Terms of Service<\/a> \u00b7 <a href=\"https:\/\/deepgram.com\/privacy\">Deepgram Privacy Policy<\/a><\/li>\n<li><strong>OpenAI<\/strong> (Pro only) \u2014 when OpenAI is your selected engine, your recorded audio is sent to OpenAI's API (using the API key you provide in Settings) to be transcribed. <a href=\"https:\/\/openai.com\/policies\/row-terms-of-use\/\">OpenAI Terms of Use<\/a> \u00b7 <a href=\"https:\/\/openai.com\/policies\/row-privacy-policy\/\">OpenAI Privacy Policy<\/a><\/li>\n<li><strong>Freemius<\/strong> \u2014 used to manage licensing for the Pro version. If you activate a Pro license, basic site and plugin data (such as your site URL and WordPress\/plugin version) is shared with Freemius to validate your license; no dictated audio or text is ever sent to Freemius. <a href=\"https:\/\/freemius.com\/terms\/\">Freemius Terms of Service<\/a> \u00b7 <a href=\"https:\/\/freemius.com\/privacy\/\">Freemius Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p>Your API keys for Deepgram\/OpenAI are stored in your site's own database and are never exposed to site visitors or included in any front-end output. If visitors can dictate through a front-end <code>acf_form()<\/code>, you may want to mention Deepgram (and, on Pro, OpenAI) in your own site's privacy policy, since their recorded audio is processed by that service.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Make sure <a href=\"https:\/\/wordpress.org\/plugins\/advanced-custom-fields\/\">Advanced Custom Fields<\/a> (free or PRO) is installed and active.<\/li>\n<li>Upload the <code>speak-input-acf<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin through the Plugins screen in WordPress.<\/li>\n<li>Activate the plugin through the \"Plugins\" screen.<\/li>\n<li>Go to <strong>Settings &gt; Speak Input ACF<\/strong> and add your Deepgram API key (a free account and starter credit are available at <a href=\"https:\/\/deepgram.com\/\">deepgram.com<\/a>).<\/li>\n<li>Edit any ACF field group. Open a <code>text<\/code> or <code>textarea<\/code> field's settings and switch to the new <strong>\"Speak Input\"<\/strong> tab. Turn on \"Enable voice dictation\" for that field.<\/li>\n<li>Save the field group. A microphone button now appears on that field wherever it's used \u2014 in the admin, and in any front-end form built with <code>acf_form()<\/code>.<\/li>\n<li>(Optional) Upgrade to Pro at <a href=\"https:\/\/speakinput.com\/advanced-custom-fields\/\">speakinput.com\/advanced-custom-fields<\/a> for <code>wysiwyg<\/code> field support, the OpenAI engine, insertion modes, and the rest of the Pro features listed above.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20my%20own%20api%20key%3F\"><h3>Do I need my own API key?<\/h3><\/dt>\n<dd><p>Yes. Speak Input doesn't include or resell transcription \u2014 you sign up for your own Deepgram account (a free tier is available) and, on Pro, optionally an OpenAI account, then enter your API key in Settings &gt; Speak Input ACF. Your key is stored on your own site and never exposed to visitors.<\/p><\/dd>\n<dt id=\"does%20this%20need%20acf%20pro%2C%20or%20does%20the%20free%20version%20of%20advanced%20custom%20fields%20work%3F\"><h3>Does this need ACF PRO, or does the free version of Advanced Custom Fields work?<\/h3><\/dt>\n<dd><p>The free version of Advanced Custom Fields is enough for dictation on <code>text<\/code> and <code>textarea<\/code> fields. Dictation on <code>wysiwyg<\/code> fields is a Speak Input Pro feature, independent of whether you're running free ACF or ACF PRO.<\/p><\/dd>\n<dt id=\"is%20%22speak%20input%20pro%22%20the%20same%20as%20%22advanced%20custom%20fields%20pro%22%3F\"><h3>Is \"Speak Input Pro\" the same as \"Advanced Custom Fields PRO\"?<\/h3><\/dt>\n<dd><p>No \u2014 they're two separate products from two separate companies. \"Speak Input Pro\" is this plugin's own paid tier; \"Advanced Custom Fields PRO\" is a separate upgrade sold by the makers of ACF. You can combine either version of Speak Input with either version of ACF.<\/p><\/dd>\n<dt id=\"is%20my%20dictated%20audio%20or%20text%20stored%20anywhere%3F\"><h3>Is my dictated audio or text stored anywhere?<\/h3><\/dt>\n<dd><p>No. Audio is sent to your chosen transcription engine (Deepgram or, on Pro, OpenAI) only to produce a transcript, and is not stored by this plugin. The optional Pro diagnostics log records only metadata about each attempt (engine, result, timing) \u2014 never the dictated text or audio. See the \"Privacy\" section above and the \"External Services\" section below for details.<\/p><\/dd>\n<dt id=\"does%20this%20work%20on%20the%20front-end%2C%20not%20just%20the%20wordpress%20admin%3F\"><h3>Does this work on the front-end, not just the WordPress admin?<\/h3><\/dt>\n<dd><p>Yes. Speak Input works with any <code>acf_form()<\/code> front-end form, including for visitors who aren't logged in. To protect your API usage from abuse, requests from visitors without edit access are limited (20 requests per 10 minutes by default); both the request count and the time window are configurable in Settings &gt; Speak Input ACF.<\/p><\/dd>\n<dt id=\"does%20%22fixed%20language%22%20%28or%20%22automatic%22%29%20force%20dictation%20into%20that%20language%3F\"><h3>Does \"Fixed language\" (or \"Automatic\") force dictation into that language?<\/h3><\/dt>\n<dd><p>No. The language setting \u2014 whether it's \"Automatic\" or a specific \"Fixed language\" you choose for a field \u2014 is a hint that helps the speech-to-text engine recognize your speech more accurately. It is not a translator and not a filter.<\/p>\n\n<p>If you dictate in a language different from the one configured, most of the time the engine will still transcribe what you actually said, in the language you actually said it, rather than translating it or refusing to transcribe it. Setting a field to English does not mean speech in another language gets translated into English, and it does not prevent you from dictating in that other language.<\/p><\/dd>\n<dt id=\"which%20browsers%20are%20supported%3F\"><h3>Which browsers are supported?<\/h3><\/dt>\n<dd><p>Speak Input relies on your browser's own microphone and recording APIs (<code>getUserMedia<\/code> and <code>MediaRecorder<\/code>), available in current versions of Chrome, Firefox and Edge. Safari's support for these APIs has historically been less consistent, so results there can vary by version.<\/p><\/dd>\n<dt id=\"can%20i%20choose%20which%20fields%20show%20the%20microphone%20button%3F\"><h3>Can I choose which fields show the microphone button?<\/h3><\/dt>\n<dd><p>Yes. Voice dictation is off by default on every field. Turn it on per field from that field's own \"Speak Input\" settings tab in ACF.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Addressed WordPress.org Plugin Check warnings: removed the now-redundant manual translation loading (WordPress already auto-loads this plugin's translations on WordPress.org), documented the intentional direct database query used only during opt-in uninstall cleanup, and renamed internal activation\/deactivation\/bootstrap functions to consistently start with the plugin's prefix. No functional change.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fixed a fatal error in the free version: diagnostics logging (a Pro-only feature, physically excluded from the free package) was referenced without a safety check on plugin activation\/deactivation, on every page load, and on every dictation request, crashing the free plugin. No change for Pro users.<\/li>\n<li>The diagnostics screen's JS asset is now also physically excluded from the free package, alongside the rest of the diagnostics feature.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>The plugin's text domain now matches its WordPress.org slug (<code>speak-input-voice-dictation-for-acf<\/code>).<\/li>\n<li>All Premium-only functionality \u2014 the OpenAI engine, wysiwyg support, insertion modes, recording time limit, prompts, and language controls \u2014 is now physically excluded from the free package (no change for Pro users).<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Renamed internal option, table and hook names to avoid conflicts with other plugins.<\/li>\n<li>The Pro-only Diagnostics feature is no longer bundled with the free version (no change for Pro users).<\/li>\n<li>Added <code>composer.json<\/code> to the package and removed bundled translation files \u2014 translations are now managed through WordPress.org.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Security hardening: added direct file access protection to two internal template files.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Voice dictation for <code>text<\/code> and <code>textarea<\/code> fields, with Deepgram as the transcription engine.<\/li>\n<li>Per-field \"Speak Input\" settings tab and global Deepgram keyterm prompting.<\/li>\n<li>Works in the admin and in front-end <code>acf_form()<\/code> forms, including for anonymous visitors, with a configurable request limit.<\/li>\n<li>Pro: <code>wysiwyg<\/code> field support, OpenAI as a second engine, insertion modes, recording time limit, context prompts, fixed\/WPML-aware language per field, and a diagnostics log.<\/li>\n<\/ul>","raw_excerpt":"Dictate straight into Advanced Custom Fields text and textarea fields -- WYSIWYG with Pro. Review and edit the transcript as usual.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/365599","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=365599"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cmoraleda"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=365599"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=365599"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=365599"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=365599"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=365599"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=365599"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}