Plugin Directory

Test out the new Plugin Directory and let us know what you think.

User Submitted Posts

Easily submit posts and images from the front-end of your site.


Important! The /custom/ directory is deprecated. If you are using a custom form template, please move it to /wp-content/your-theme/usp/. For more information, check out the "Custom Submission Form" section under Installation.

  • Changed get_template_directory() to get_stylesheet_directory() in usp_display_form()
  • Changed get_template_directory() to get_stylesheet_directory() in usp_enqueueResources()
  • Changed get_template_directory_uri() to get_stylesheet_directory_uri() in usp_enqueueResources()


Important! The /custom/ directory is deprecated. If you are using a custom form template, please move it to /wp-content/your-theme/usp/. For more information, check out the "Custom Submission Form" section under Installation.

  • Moved custom form template to theme directory
  • Refactored and combined usp_js_vars() with usp_enqueueResources()
  • Refactored usp_load_admin_styles()
  • Refactored add_usp_links() function
  • Refined usp_display_form() function
  • Removed usp_editor_style() and file
  • Removed deprecated usp_currentPageURL()
  • Removed filter hook usp_current_page
  • Fine-tuned submission form and styles
  • Improved default styling of WP RTE field
  • Reorganized and refined plugin settings page
  • Upgraded Parsley.js to version 2.6.0
  • Deprecated JS function usp_check_files()
  • Bugfix: conflict with "Require User Login" and "Registered Username"
  • Bugfix: conflict with "Require User Login" and "User Profile URL"
  • Bugfix: support nag re-appears after each settings save
  • Added usp_default_title filter hook for default post titles
  • Changed form label from "Post URL" to "User URL" on plugin settings page
  • Added missing parameter to usp_check_images()
  • Reorganized and streamlined plugin file structure
  • Streamlined some global variables
  • Added some missing translation strings
  • Updated plugin author URL
  • Updated Twitter URL to https
  • Changed stable tag from trunk to latest version
  • Updated URL for rate this plugin links
  • Regenerated default translation template
  • Tested on WordPress version 4.7 (beta)


  • Fine-tuned the plugin settings page
  • Replaced _e() with esc_html_e() or esc_attr_e()
  • Replaced __() with esc_html__() or esc_attr__()
  • Added plugin icons and larger banner image
  • Improved translation support
  • Added more allowed tags and attributes to relevant plugin settings
  • Removed usp_addNewPostStatus() function (deprecated hook)
  • Fixed bug where required URL field shows error if User Profile URL enabled
  • Added more allowed tags and attributes to submitted post content
  • Refined logic of usp_checkForPublicSubmission() function
  • Added usp_redirect_message() for error messages when Redirect URL enabled
  • Changed hook priority for usp_checkForPublicSubmission() function
  • Added Russian translation (thanks to Nick Lysenko)
  • Added setting to display form only to logged-in users
  • Fine-tuned default form styles and error messages
  • Generated new translation template
  • Tested on WordPress 4.6


  • Cleaned up plugin tags
  • Added new Dutch translation (thanks to Berend)
  • Added Italian translation (thanks to Rosario)
  • Replaced icon with retina version
  • Added screenshot to readme/docs
  • Added retina version of banner
  • Reorganized and refreshed readme.txt
  • Tested on WordPress version 4.5 beta


  • Fixes XSS vulnerability (thanks to Panagiotis Vagenas)
  • Updates descriptions for settings "Registered Username" and "User Profile URL"
  • Adds [usp_display_posts] shortcode to display list of user submitted posts
  • Adds UTF-8 default parameter to get_option('blog_charset')
  • Replaces get_currentuserinfo() with wp_get_current_user()
  • Removes quotes from charset in email headers
  • Adds screenshots to readme.txt/documentation
  • Cleans up readme.txt/documentation
  • Tested on WordPress 4.5 alpha


Note: the CSS and JavaScript for the plugin settings page is now moved to their own external files. Please clear your browser cache and/or force refresh the settings page to load the new files!

  • Added options to auto-display custom fields and images
  • "USP" button on Posts screen now displays all USP Posts (not just Pending)
  • Added Dutch translation (Thanks to Erik Kroon)
  • Added German translation (Thanks to Michael)
  • Added check for $post in usp_is_public_submission()
  • Removed width from a#usp_add-another in usp.css
  • Fixed custom markup for "Add Another" link
  • Added option to show fields but not require
  • Added usp_check_required() function
  • Added setting to enable shortcodes in widgets
  • Added get_currentuserinfo() where required
  • Added esc_url() to sanitize URI strings
  • Removed unnecessary mail() headers (Thanks to Jason Hendriks)
  • Refined usp_send_mail_alert()
  • Fixed sending alerts to multiple email addresses
  • Added option to disable tracking of IP addresses
  • Added option to specify customize email alert subject
  • Added option to specify customize email alert message
  • Reorganized and streamlined settings page
  • Added option to disable default USP styles for custom forms
  • Replaced USP graphics with retina versions
  • Added usp_load_admin_styles() to enqueue settings styles
  • Replaced load_custom_admin_css() with usp_load_admin_styles()
  • Moved JavaScript and CSS to their own external files
  • Added option to publish as "Draft" Post Status
  • Removed deprecated usp_answer and usp_form_width options
  • Added more attributes to $allowed_atts
  • Added usp_form_display_options()
  • Added usp_auto_display_options()
  • Added hooks:
    • usp_post_draft
    • usp_image_args
    • usp_image_title
    • usp_image_thumb
    • usp_image_medium
    • usp_image_large
    • usp_image_full
    • usp_image_custom_size
    • usp_image_custom
    • usp_email_custom_field
    • usp_url_custom_field
  • Added usp_auto_display_images(), usp_auto_display_email(), usp_auto_display_url()
  • Added usp_replace_image_vars()
  • USP Meta Box not displayed if no data to display
  • Fixed bug with targeted loading of USP stylesheet
  • Updated heading hierarchy in plugin settings
  • Updated translation template file
  • Updated minimum version requirement
  • Tested on WordPress 4.4 beta


  • Tested on WordPress 4.3
  • Updated minimum version requirement


  • Tested with WP 4.2 + 4.3 (alpha)
  • Changes a few "http" links to "https"
  • Fixes XSS vulnerability with add_query_arg()
  • Adds isset() to stop some minor PHP warnings
  • Fixes mixed content warning for https sites
  • Adds support for exif_imagetype when needed
  • Adds Arabic translation, thanks to Amine CH
  • Adds Spanish translation, thanks to Clara Roldán


  • Tested with latest version of WP (4.1)
  • Increases minimum version to WP 3.8
  • Removes deprecated screen_icon()
  • Adds $usp_wp_vers for version check
  • Streamline/fine-tune plugin code
  • Adds Text Domain and Domain Path to file header
  • Adds alert panel to plugin settings page
  • Adds Serbo-Croatian translation - thanks Borisa Djuraskovic
  • Adds Chinese translation - thanks Xing
  • Improves error handling
  • Improves post author process
  • Improves post-submission process
  • Improves code in submission-form.php
  • Adds nonce security to submission process
  • Adds proper headers to email alert
  • Adds Email field to the form (hidden by default)
  • Adds USP Info meta box to Post Edit screen (Props: Nathan Clough)
  • Adds specific error messages for fields/files (e.g., min, max, required)
  • Adds option to disable required attributes
  • Adds usp_post_status filter hook
  • Adds usp_file_key filter hook
  • Adds usp_post_data filter hook
  • Adds usp_editor_settings filter hook
  • Adds usp_error_message filter hook
  • Adds usp_post_moderate filter hook
  • Adds usp_post_publish filter hook
  • Adds usp_post_approve filter hook
  • Adds drag_drop_upload to visual/rich-text editor
  • Adds option to require unique post titles
  • Changes approved-post count to check for name/IP instead of URL/IP
  • Changes class .hidden to .usp-hidden in default submission form
  • Changes class .no-js to .usp-no-js in default submission form
  • Changes class .js to .usp-js in default submission form
  • Replaces sanitize_text_field() with esc_url() for URL field
  • Replaces default .mo/.po templates with .pot template
  • Fixes bug where encoded characters are removed from URL
  • Fixes various bugs and PHP notices


  • Removes required attribute from default form textarea
  • Removes "exclude" from type on redirect-override in default form
  • Adds class "exclude" and "hidden" to redirect-override in default form


  • Tested on latest version of WordPress (4.0)
  • Increases min-version requirement to 3.7
  • Improves layout and styles of plugin settings page
  • Adds Romanian translation - thanks Hideg Andras
  • Adds Persian (Farsi) translation - thanks Pooya Behravesh
  • Adds French translation - thanks Mirko Humbert and Matthieu Solente
  • Updates default mo/po translation files
  • Updates Parsley.js to version 2.0
  • Updates usp.css with styles for Parsley 2.0
  • Updates captcha-check script for Parsley 2.0
  • Updates markup in default form for Parsley 2.0
  • Replaces call to wp-load.php with wp_print_scripts
  • Replaces sac.php with individual JavaScript libraries
  • Improves logic of usp_enqueueResources() function
  • Improves logic of min-file check JavaScript
  • Removes ?version from enqueued resources
  • Adds option to use "custom" form and stylesheet
  • Removes deprecated "classic" form, submission-form-classic.php and usp-classic.css
  • Removes novalidate from default form
  • Removes data-type="url" from default form
  • Removes .usp-required classes from default form
  • Removes id="user-submitted-tags" from default form
  • Removes <div class="usp-error"></div> from default form
  • Adds "Please select a category.." to category select field
  • Updates CSS for default form, see list at http://m0n.co/e
  • Replaces some stripslashes() with sanitize_text_field()
  • Replaces some htmlentities() with sanitize_text_field()
  • Fixes bug where too big/small images would not trigger error
  • Adds post id and error as query variable in return URL
  • Adds sanitize_text_field() to usp_currentPageURL()
  • Adds the following filter hooks:
    • usp_post_status
    • usp_post_author
    • usp_form_shortcode
    • usp_mail_subject
    • usp_mail_message
    • usp_new_post
    • usp_input_validate
  • Adds the following action hooks:
    • usp_submit_success
    • usp_submit_error
    • usp_insert_before
    • usp_insert_after
    • usp_files_before
    • usp_files_after
    • usp_current_page


  • usp_require_wp_version() now runs only on plugin activation


  • Tested with latest version of WordPress (3.8)
  • Added trailing slash to load_plugin_textdomain()
  • Increased WP minimum version requirement from 3.3 to 3.5
  • Added popout info about Pro version now available
  • Added Spanish translation; thanks to María Iglesias
  • Change CSS for "USP" button to display after the "Filter" button on edit.php
  • Added 8px margin to "Empty Trash" button on the Post Trash screen
  • Changed handle from "uspContent" to "uspcontent" for wp_editor()
  • Added class ".usp-required" to input fields (for use with JavaScript)
  • Fixed issue of submitted posts going to Trash when a specific number of images is required AND the user submits the form without selecting the required number of images. JavaScript now checks for required image(s) and will not allow the form to be submitted until the user has selected the correct number of images.
  • Improved logic responsible for displaying file input fields and the "Add Another Image" button
  • Added option to display custom markup for "Add Another Image" button
  • Replaced select fields with number inputs for settings "minimum/maximum number of images"
  • Added href, rel, and target attributes to $allowed_atts
  • Made default options translatable, generated new mo/po templates
  • Streamlined plugin settings intro panel


  • Added i18n support
  • Added uninstall.php file
  • Removed "Δ" from die()
  • Added "rate this plugin" links
  • Added Brazilian Portuguese translation; thanks to Daniel Lemes
  • Added notes about support for multiple email addresses for email alerts
  • Increased line-height on settings page <td> elements
  • Added .inline class to some plugin settings
  • Changed CSS for #usp_admin_filter_posts in usp-admin.css
  • Changed link text on Post filter button from "User Submitted Posts" to "USP"
  • Fixed backwards setting for captcha case-sensitivity
  • Added is_object($post) to usp_display_featured_image; Thanks to Larry Holish
  • Changed application/x-javascript to application/javascript in usp.php
  • Removed getUrlVars function and changed "forget input values" to use a simpler regex; Thanks to Larry Holish
  • Tricked out wp_editor with complete array in both submission-form files
  • Added note on settings screen about deprecating the "classic" submit form
  • Replaced wp-blog-header.php with wp-load.php in usp.php
  • Improved sanitization of POST variables
  • Added check for empty content when content textarea is displayed on form
  • Removed closing ?> from user-submitted-posts.php
  • Tested with latest version of WordPress (3.7)
  • Fleshed out readme.txt with even more infos
  • General code cleanup and maintenance


  • Added option to set attachment as featured image
  • Improved localization support (.mo and .po)
  • Added optional use of WP's built-in rich text editor
  • Added custom stylesheet for WP's rich text editor
  • Replace antispam placeholder in submission-form.php
  • Improved jQuery for "add another image" functionality
  • Added jQuery script to remember form input values via cookies
  • Added data validation for input fields via Parsley @ http://parsleyjs.org
  • Overview and Updates panels now toggled open by default
  • Updated CSS styles for HTML5 and Classic forms
  • Improved logic for form verification JavaScript
  • Resolved numerous PHP notices and warnings
  • Updated readme.txt with more infos
  • General code check n clean


  • Added explanation of plugin functionality in readme.txt
  • Fixed character encoding issue for author name
  • Added margins to submit buttons (to fix WP's new CSS)
  • Removed "anti-spam" text from captcha placeholder attribute
  • usp_post_attachments() tag now accepts custom sizes
  • Added temp fix for warning: "getimagesize(): Filename cannot be empty"
  • Restyled USP filter button on admin Posts pages


  • added id to tag input field in submission-form.php
  • enabled option to disable loading of external JavaScript file
  • enabled option to specify URL for targeted resource loading
  • added fieldset { border: 0; } to usp.css stylesheet
  • increased width of anti-spam input field (via usp.css)
  • changed the order of input fields in submission-form.php
  • fixed loading of resources on success and error pages
  • added field for custom content to display before the USP form
  • enable HMTL for success, error, and upload messages
  • fixed issue with content not getting included in posts


  • increased default image width and height
  • comment out output start in three files
  • remove echo output for input value attributes
  • cleaned up placeholders with clearer infos
  • remove usp_validateContent() function
  • remove conditional if for content in usp_checkForPublicSubmission() [1]
  • [1] default text no longer added to posts when empty
  • remove content validation in usp_createPublicSubmission()
  • added option to receive email alert for new submissions
  • added option to set author as current user
  • added option to set author url as usp url
  • added option to set category as hidden
  • submission-form.php & submission-form-classic.php: changed markup output for success & error messages


  • Fixed non-submission when title and other fields are hidden


  • Rebuilt plugin and optimized code using current WP API
  • Redesigned settings page, toggling panels, better structure, more info, etc.
  • Errors now redirect to specified page (if set) or current page
  • Fixed bug to allow for unlimited number of uploaded images
  • Cleaned up template tags, added inline comments
  • Optimized/enhanced the user-submission form
  • Added option to restore default settings
  • Added settings link from Plugins page
  • Renamed CSS and JavaScript files
  • Added challenge question captcha
  • Added hidden field for security
  • Added option for custom success message
  • Submission form now retains entered value if error
  • Added placeholder attributes to the form fields
  • Submissions including invalid upload files now redirect to form with error message
  • Fixed default author of submitted posts
  • the_author_link is not filterable, so created new function usp_author_link
  • moved admin styles from form stylesheet to admin-only stylesheet
  • Added new HTML5 form and stylesheet, kept originals as "classic" version


  • Initial release

Requires: 4.1 or higher
Compatible up to: 4.7.1
Last Updated: 2 months ago
Active Installs: 20,000+


4.7 out of 5 stars


4 of 27 support threads in the last two months have been marked resolved.

Got something to say? Need help?


Not enough data

0 people say it works.
0 people say it's broken.

100,3,3 100,2,2 100,1,1 100,1,1
100,1,1 100,1,1
100,1,1 100,2,2
100,1,1 100,3,3
100,2,2 100,1,1
100,2,2 100,1,1 50,2,1
100,1,1 100,1,1
100,1,1 100,1,1
100,1,1 100,2,2
67,3,2 100,1,1 100,1,1