SpeakOut! Email Petitions


SpeakOut! Email Petitions allows you to easily create petition forms on your site.

When visitors to your site submit the petition form, a copy of your message will be sent to the email address you specified e.g. your mayor. They can also choose to have the email BCC’d to themselves (default). The petition message will be signed with the contact information provided by the form submitter. After signing the petition, visitors will have the option of sharing your petition page with their followers on Facebook or Twitter.

Signatures are stored in the database and can be easily exported to CSV format for further analysis. You may set a goal for the number of signatures you hope to collect and then watch as a progress bar tracks your petition’s advance toward it’s goal. Petitions may also be configured to stop accepting new signatures on a specified date.

This plugin is a fork of the SpeakUp plugin by Kreg Wallace that was quite good but needed updates and appears to have been abandoned. Current versions of SpeakOut! include an importer to migrate from SpeakUp.


  • Arabic ar_AR (Asem Alzoubi)
  • Czech cs_CZ (Petr Štěpán)
  • Danish da_DK (A. L.)
  • Dutch nl_NL (Kris Zanders)
  • Finnish fi_FI
  • French fr_FR
  • German de_DE (Hannes Heller, Armin Vasilico, Andreas Kumlehn, Frank Jermann)
  • Hebrew he_IL (Oren L)
  • Italian it_IT (MacItaly)
  • Norwegian nb_NO
  • Polish pl_PL (Damian Dzieduch)
  • Romanian ro_RO (Web Hosting Geeks)
  • Russian ru_RU (Teplitsa)
  • Slovenian sl_SI (MA-SEO)
  • Spanish es_ES
  • Swedish sv_SE (Susanne Nyman Furugård @sunyfu)

If you would like to request or contribute a specific translation not listed above, visit the SpeakOut! Email Petitions website and use the contact form.


  • Improvement: updated some functions to ensure compatability with future PHP versions
  • Improvement: Nicer HTML in confirmation emails – I was sure I had done this in the past 😛


  • Bug fix: typo must have caused problems with honorific 😛
  • Bug fix: fine tuned HTML in confirmation email message
  • Improvement: allowed some formatting tags in confirmation email message
  • Improvement: update all translations including correction to German translation (Thanks @MKJ2)
  • Improvement: if the full name is displayed in the signature list (not anonymised surname) it also displays the honorific. I am sure someone is going to ask for this to become an option ;o)
  • Improvement: the [your signature] in the displayed petition text looks like shortcode to site owners. I have changed it to **your signature** to lessen confusion
  • Improvement: Danish translation added. Thanks to A.L. who didn’t want to be acknowledged but will be anyway :o)


  • Improvement: confirmation emails now HTML instead of plain text
  • Improvement: added signaturegoal shortcode to display signaure goal. Useful in conjuction with the signaturecount shortcode e.g. We have [signaturecount id=”1″] signatures towards our goal of [signaturegoal id=”1″].
  • Improvement: updated petitions list to show all the shortcodes possible


  • Bug fix: moved the code for the response message outside the form – this only affected anyone who had the form hide on submission
  • Bug fix: hadn’t updated one CSS colour
  • Bug fix: optin label bumping to new line if long.
  • Improvement: addition of non-gender specific honorific “Mx”
  • Improvement: updated German translation didn’t get included


  • Bug fix: recaptcha shouldn’t be displaying. I am working on integrating it and this was preliminary code
  • Improvement: Box displaying confirmation of signing and any errors moved from top of form to bottom. Makes more sense that it is underneath where person just clicked
  • Big fix: incorrect color value in CSS for progress bar when more than 50% to goal


  • Bug fix: incorrect code uploaded in

  • Bug fix: Typo in widget code caused closing to not be included.


  • Improvement: Added percentage thingy to widget as well
  • Improvement: CSS files updated to fix some errors
  • Improvement: Added “thanks for signing”/error notification box at bottom as well as at top (Thanks Sherry)


  • Bug fix: the percentage of goal worked fine in testing with low goals, but high goals didn’t calculate % properly
  • Improvement: added “of goals” to all language files
  • Bug fix: hopefully 😛 the word signature wasn’t pluralising properly, at least in French.


  • Improvement: When you have set a goal, it how shows the percentage of the goal reached so far beside the signature count, plus the goal value on the right of the progress bar. (Thanks for pointing this out @anderenbenutzer)
  • Improvement: reversed the colours of the progress bar. It is now red when hardly signed and green when 100% of goal. Makes more sense I reckon.
  • Improvement: Added blank index.php file in each directory to prevent directory listing. This is more for housekeeping, since like all like all WP plugins, SpeakOut! is open source so anyone can download it and view the file structure.
  • Improvement: reduced the time for confirmation redirect from 10 seconds to 2 seconds.
  • Improvement: fixes to German translation (Thanks Frank J)
  • Update: minor tweaks to the file that generates this text
  • Bug fix: If optin text is long, it wrapped onto a new line leaving the checkbox orphaned on a new line.
  • Bug fix: The phrase “Your Signature” wasn’t being translated when viewing petition text
  • Bug fix: Custom field label wasn’t being saved when petition was created


  • Feature: It is now possible to have the petition form hide after it is signed, leaving the success message and social media icons. Look at /wp-content/plugins/speakout/js/public.js on line 108 (Thanks for the suggestion @kayleyathomas)
  • Update: Added honorific Dr. Can add others on request ;o) (Thanksf for the suggestion @jimkcombs3)
  • Update: All language files (Thanks Frank J. for German fixes)
  • Update: changed text in signature field to black (from dark grey on grey). Remember that you can have your own .CSS file if you want to modify styles.
  • Bug fix: Honorific was completely broken on widget
  • Bug fix: Some phrases weren’t translating in confirmation email (Thanks Frank J.)


  • NEW FEATURE: If you have multiple petitions and don’t want to have a separate page for each one, you can load petitions dynamically by using the url example.com/?petition=(petitionID) e.g. https://speakout.123host.net.au/?petition=2 Thanks Rick for this cool idea plus the code to make it work.

  • Added Arabic translation – thanks Asem Alzoubi
  • Updated German translation to include Fraulein for Miss
  • Changed the term Post Code to the more generic Postal Code and updated all translations


  • Updated countries to match the current situation in the former Yugoslavia – thanks @cello78ss
  • Another tweak to try to solve broken confirmation links in some email clients – thanks @rotegras

  • Tweak of CSS to suit honorific fix


  • Made honorific optional – you can’t please everyone :o)


  • Some edited files not included in 1.6.1


  • forgot about the translation of honorifics (Ms, Mr etc)


  • rearranged fields on dashboard > speakout > settings > signature list, moving the Display above Columns as choosing long list disables the Columns fields. This makes it more clear why they might be disabled
  • petition admin display options, Display custom message slider wasn’t opening
  • added honorific (Ms, Mr etc) field on petition. This is displayed in target email.


  • fixed bug where comma separated signature list only showed abbreviated surnames. Thanks Stefan


  • for new installs removed extra space character after the petition title in confirmation message. Existing installs can edit this in dashboard > speakout > settings > confirmation emails
  • changed the email content type from text/html to text/plain following reports it messed with Outlook emails.


  • changed the email for confirmation emails to utf-8 to fix the link only being half clickable in some email apps (GMX in particular). It will now be a non clickable URL in some software, but it is still fine in gmail. Not quite sure what is going on here, but this solves the problem of the link breaking.
  • to match the previous fix, default text for confirmation emails in new installs is now “Please confirm your email address by clicking or copying and pasting the link below:”. In existing installs you can change the text by going to dashboard > speakout > settings > confirmation emails > email message


  • set default value for ‘custom field value’ (new installs only)
  • set default value 0 for ‘signature confirmation’ field (new installs only)
  • tweaked default email confirmation message to include petition title (new installs only)
  • changed function type to fix errors when landing on email confirmation page
  • added text on Admin Display tab of settings to remind about default values
  • added missing translation for the word ‘signatures’
  • updated all translations – I am sure some of them are a bit dodgy


  • typo in database update – not sure why I can see this on the development site before I commit update :o(


  • typo in database update


  • Fixed mislabelling of petition version so that it updates properly automatically.
  • Trying to get languages more efficient a few functions were broken e.g. deleting petitions They should be fixed.
  • When choosing to display signatures in a row rather than a table, column checkboxes are disabled.
  • Only display 1st 100 characters of custom message column in signature list
  • Added nowrap to signer’s name in signature list


  • changed the name of the translation text domain from dk_speakout to speakout as specified here https://developer.wordpress.org/plugins/internationalization/how-to-internationalize-your-plugin/


  • fixed a typo that caused radio buttons to not fill on the petition tab of the setup page.


  • added ability to display in signature list a custom message signer has sent. _dashboard > SpeakOut! > Signature List > check Custom Message
  • added requested option (dashboard > speakout > settings > signatures) to display signatures as long comma separated list rather than table e.g. Judy R., Robert F., Steve D., etc
  • remembered to update language files to match :o)
  • changed width of count column to 12% when displaying signatures in table
  • extended maximum execution time of CSV exporter from the default 30 seconds to 3 minutes


  • fixed settings page not displaying in 1.4.1 – ouch!


  • Forgot to update translations to include new “Display BCC field” phrase


  • Added option to globally display or hide BCC field
  • Added code to theme_basic.css to fix size of modal popup on mobile devices – thanks @pattihis


  • Add Czech translation. Thanks Petr Štěpán


  • updating some phrases
  • language file updates to match


  • Fixed warning that ‘$this->WP_Widget’ is deprecated, replaced with ‘parent::__construct’ – had already done this in 1.3.0. Not sure what happened there.
  • fixed typo in German translation


  • Fixed bug BCC not working (again). Discovered that I hadn’t uploaded an edited file from my development site, then when I did the upgrade locally it over-wrote my changes with the original code that should have been changed…sigh…
  • Housekeeping cleanups
  • Fixed Norwegian translation


  • Added Norwegian translation (requested by Robert)
  • Added Estonian translation (requested by Janno)
  • Updated all translation files with missing strings
  • Replaced some hard coded strings with translatable strings


  • Fixed bug BCC not working
  • Fixed bug class.petitions.php
  • Updated all translation files – I have bought poedit, so translation requests are welcome
  • Fixed misnamed German translation file


  • Removed non-breaking-space ‘&nbsp’ from the shortcode example so that if people copy and past the example it doesn’t break the petition.


  • Tidied up uninstall to be better behaved and remove options from database
  • Made label text for BCC field auto translatable


  • Importer from speakup had bug. Only change in this version, upgrade not needed if not using importer.


  • Oops! When copying code from test site to code store, accidentally copied contents of one file into another similarly named. FIXED!
  • Typo in CSS caused new BCC field to be out of alignment
  • Fixed typo and reworded import page for clarity


  • Added option for person signing to BCC self
  • Added option to import global settings from speakup over-writing settings in SpeakOut!
  • Added some fancies to disable the import button if there are no legacy speakup petitions to import, but enable if settings import is checked
  • Added new column with Petition ID to petition list. ID was in display of short codes, but wasn’t intuitive.
  • Added petition ID number to edit success message
  • Changed settings page title and header from Email Petitions Settings to SpeakOut! Petition Settings to further distinguish from old plugin
  • Changed option from “Allow custom messages” to “Allow message to be edited” for clarity
  • If option “Allow message to be edited” is checked, on petition top section text will change from “READ THE PETITION” to “READ OR EDIT THE PETITION”


  • Added importer from speakup to SpeakOut!
  • Version jump to clean up some confusion after roll back due to broken widget
  • Changed dashboard menu titles including main title SpeakOut! to make distinct from “email petition” used in SpeakUp
  • Add clarification that multiple email target email addresses can be comma separated
  • Removed list of US states from drop-down. This is an international plugin 😛
  • Added how to make postal code required to FAQ – thanks @altinkaya
  • Fixed warning that $this->WP_Widget is deprecated, replaced with parent::__construct – thanks @mannweb
  • Various typo fixes


Abandon this version – widget broken, version control messed up.


Wrong icon being displayed


File missed in commit


Getting dashboard icons right


Fix broken directory references missed as part of fork.


Initial fork of SpeakUp! with additional privacy option in setting so only display first letter of surname

Emailpetition Shortcode Attributes

The following attributes may be applied when using the ‘[emailpetition]’ shortcode


The ID number of your petition (required). To display a basic petition, use this format:
‘[emailpetition id=”1″]’


This sets the width of the wrapper ‘


div>’ that surrounds the petition form. Format as you would a width rule for any standard CSS selector. Values can be denominated in px, pt, em, % etc. The units marker (px, %) must be included.

To set the petition from to display at 100% of it’s container, use:
‘[emailpetition id=”1″ width=”100%”]’

A petition set to display at 500 pixels wide can be achieved using:
‘[emailpetition id=”1″ width=”500px”]’


This sets the height of the petition message box (rather than the height of the entire form). Format as you would a height rule for any standard CSS selector. Values can be denominated in px, pt, em, % etc. The units marker (px, %) must be included.

A few notes on using percentages:
Using a % value only works when the “Allow messages to be edited” feature is turned off—because the petition message will be displayed in a ‘


div>’. When “Allow messages to be edited” is turned on, the petition message is displayed in a ”, which cannot be styled with % heights. Use px to set the height on petitions that allow message customization.

To set the message box to scale to 100% of the height of the message it contains, use any % value (setting this to 100%, 0%, 200% or any other % value has the same result). Use px if you want the box to scale to a specific height.

‘[emailpetition id=”1″ height=”500px”]’
‘[emailpetition id=”1″ height=”100%”]’


Sets the width of the outer progress bar. The filled area of the progress bar will automatically scale proportionally with the width of the outer prgress bar. Provide a numeric value in pixels only. Do not include the px unit marker.

To display the progress bar at 300 pixels wide, use:
‘[emailpetition id=”1″ progresswidth=”300″]’


Adds an arbitrary class name to the wrapper ‘


div>’ that surrounds the petition form. Typically used to assign the alignright, alignleft or aligncenter classes to the petition in order to float the petition form to one side of its container. To assign multiple classes, separate the class names with spaces.

‘[emailpetition id=”1″ class=”alignright”]’
‘[emailpetition id=”1″ class=”style1 style2″]’

Signaturelist Shortcode Attributes


The ID number of your petition (required). To display a basic signature list, use this format:
‘[signaturelist id=”1″]’


The number of signature rows to display in the table. This will override the default value provided on the Settings page. To display 10 rows, use:
‘[signaturelist id=”1″ rows=”10″]’


Format of values in the date column. Use any of the standard PHP date formating characters. Default is ‘M d, Y’. A date such as “Sunday October 14, 2012 @ 9:42 am” can be displayed using:
‘[signaturelist id=”1″ dateformat=”l F d, Y @ g:i a”]’


The text that displays in the previous signatures pagination button. Default is <.


The text that displays in the next signatures pagination button. Default is >.

signaturecount Shortcode

Display the number (as text) of signatures collected for a given petition:


The ID number of your petition (required).
‘[signaturecount id=”3″]’

signaturegoal Shortcode

Display the number (as text) of goal for a given petition:


The ID number of your petition (required).
‘[signaturegoal id=”3″]’


Use the automatic installer. Or…

  1. Download and unzip the the plugin zip file.
  2. Upload the ‘speakout’ folder to your ‘/wp-content/plugins/’ directory
  3. Activate SpeakOut! Email Petitions through the “Plugins” menu in the WordPress admin.


Installation Instructions

Use the automatic installer. Or…

  1. Download and unzip the the plugin zip file.
  2. Upload the ‘speakout’ folder to your ‘/wp-content/plugins/’ directory
  3. Activate SpeakOut! Email Petitions through the “Plugins” menu in the WordPress admin.
How do I create a new petition
  1. Select “Add New” from the “SpeakOut!” menu in the dashboard.
  2. Complete the “Add New Email Petition” form with the options you desire and save your petition by clicking the “Create Petition” button.
  3. Enter the petition’s shortcode into any page or post where you want the petition form to appear. Example:
    ‘[emailpetition id=”1″]’
I have a petition that isn’t displaying, it is showing the shortcode

Find the shortcode on the page e.g. [emailpetition id=”3″], delete the space and type it again. The original code included a non-breaking space which caused a problem with WordPress. It might have been a WordPress update that caused it to stop working.

Can I display the petition as a widget?

Yes. Once you’ve created a petition, go to the Widgets screen and drag the “SpeakOut! Email Petitions” widget into a sidebar. In the widget’s options, enter a Title and a Call to Action and then select the petition you wish to display.

I want to send to more than 10 target emails but there isn’t room in the field

In your hosting management (cpanel?) create a forwarder something like speakout@example.com for each email address. Then make that forwarder your target email.

My language isn’t available, will you translate Speakout! for me?

More than likely, head to https://speakout.123host.net.au/contact and send a message.

Facebook is showing a different image to what I want

Add a featured image to the page. Also check out this post https://nathaningram.com/when-facebook-isnt-using-the-featured-image-for-your-wordpress-post/

Why are some phrases not translated into my language?

It is only the fixed phrases that will will automatically translate. Some of the strings on a petition can be edited, change them in dashboard > SpeakOut! > settings > check all the tabs.

Why are some people not receiving the confirmation emails?

Some email services (like AOL, Hotmail, and a few others) do not accept mail sent from the PHP mail() function. So, people who sign your petition with an email address from one of these providers may not be able to receive a confirmation email. To get around this problem, try installing the WP Mail SMTP plugin which will redirect calls to the PHP mail() function through your webserver’s SMTP configuration.

How can I create a custom style for the petition form?

First, select “None” as your theme on the Settings screen. Then add a ‘petition.css’ file to your theme folder. You can use the styles included in the plugin’s CSS folder as a starting point for your custom theme — just copy the contents of ‘theme-standard.css’ or ‘theme-basic.css’ into your ‘petition.css’ file and make any modifications you desire.

Custom styles can also be created for the widget and signaturelists by adding petition-widget.css or petition-signaturelist.css to your theme and changing the theme for these items to “None”.

The First Name, Last Name or Email fields in the petition form display the name and email of the site administrator. What’s going on?

These fields are filled automatically for logged-in users. You are seeing the name and email info associated with your user account. Other users will see their own information in these fields. Or, if the user is not logged-in, the fields will be empty.

Can the petition message be sent to multiple email addresses?

Yes. In the Target Email field, simply enter a comma-separated list of email addresses.

Is there a way to confirm a user’s email address when they sign a petition?

Yes. Simply select “Confirm signatures” when creating a petition and a confirmation email will be sent to the address used to sign the petition. By clicking the link in the confirmation email, the signer can confirm their email address. The petition message will not be sent until the signer’s email address is confirmed.

Can I run a petition without having it send email?

Yes. when you create a new petition, simply select the checkbox labelled “Do not send email (only collect signatures)” at the top of the Petition box and email will not be sent out when the petition is signed.

Is it possible to have the petition form hide after it has been signed leaving the success message and social media icons?

Yes. Look at /wp-content/plugins/speakout/js/public.js at about line 110.

Is there a way to publicly display the names of people who have signed my petition?

Yes, simply place the signaturelist shortcode wherever you want the list to appear in your post (be sure to set the ‘id’ value to match the id number of your petition). Example:

‘[signaturelist id=”1″]’

What if I don’t want their full name displayed?

See dashboard > SpeakOut! > settings > Signature List tab > Privacy

Can I download a list of my petition’s signatures?

Yes. To download the signatures in CSV format, click the “Download as CSV” button at the top of the Signatures screen. If you do not see a “Download as CSV” button on this screen, you will first need to select your petition from the drop-down list.

I downloaded the CSV file, but when I open it in a spreadsheet application, the values aren’t in the correct columns. Can I fix this?

If the CSV file looks scrambled, try changing its filename extension from .csv to .txt and then re-opening it in your spreadsheet app. The columns should be arranged correctly. (If you wish to keep the .csv extension, once you’ve opened the .txt file, re-save it as a CSV from your spreadsheet app, which will structure the contents of the file in a version of the CSV format that it understands.)

Can I import existing petitions and signatures from SpeakUp?

Since version 1.3.0 there is an item in the dashboard menu to import from SpeakUp to SpeakOut! This is a non descructive import, it doesn’t affect the existing SpeakUp data at all, simply copies it to SpeakOut! If you have any previous petitions in SpeakOut! they will not be affected. Legacy SpeakUp shortcodes will still work, but the petition ID may need to be updated.

After importing it is strongly recommended that SpeakUp be deactivated.

Can I make the postal code a required field?

You need to edit two files in order to complete the new “required” fields to get working. First file is speakout/includes/emailpetition.php and the second file is speakout/js/public.js

The first file “emailpetition.php”

The following steps are required in order to make the relevant to “required”.
Find the following line.

id . ‘”>’ . __( ‘Postal Code’, ‘speakout’ ) . ‘

Change this line to;
id . ‘” class=”required”’ . ‘>’ . __( ‘Postal Code’, ‘speakout’ ) . ‘

The second file public.js

Find the following lines:
if ( lastname === ” ) {
$( ‘#dk-speakout-last-name-‘ + id ).addClass( ‘dk-speakout-error’ );
errors ++;
Append just after this if statement section the following if statement.
if ( postcode === ” ) {
$( ‘#dk-speakout-postcode-‘ + id ).addClass( ‘dk-speakout-error’ );
errors ++;

So it should look like this:

if ( lastname === ” ) {
$( ‘#dk-speakout-last-name-‘ + id ).addClass( ‘dk-speakout-error’ );
errors ++;
if ( postcode === ” ) {
$( ‘#dk-speakout-postcode-‘ + id ).addClass( ‘dk-speakout-error’ );
errors ++;
(Thanks to @altinkaya)



Muy útil plugin. Ha funcionado perfecto para el proyecto que desarrollé. El soporte técnico muy bueno también. A la espera de nuevas funcionalidades y mejoras. Felicitaciones desde Chile.

5 Star Support

My site has relied heavily on Speakup email petitions for years now. It is a great thing that SpeakOut came along with its excellent support to improve on the old abandoned plugin. The addition of the BCC is awesome!

Read all 17 reviews

Contributors & Developers

“SpeakOut! Email Petitions” is open source software. The following people have contributed to this plugin.