{"id":16677,"date":"2012-01-30T08:32:55","date_gmt":"2012-01-30T08:32:55","guid":{"rendered":"https:\/\/wordpress.org\/plugins-wp\/wp-approve-user\/"},"modified":"2026-04-17T21:24:47","modified_gmt":"2026-04-17T21:24:47","slug":"wp-approve-user","status":"publish","type":"plugin","link":"https:\/\/kir.wordpress.org\/plugins\/wp-approve-user\/","author":8772187,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"12","stable_tag":"12","tested":"6.9.4","requires":"4.7","requires_php":"7.4","requires_plugins":null,"header_name":"WP Approve User","header_author":"Konstantin Obenland","header_description":"","assets_banners_color":"4f4f4f","last_updated":"2026-04-17 21:24:47","external_support_url":"","external_repository_url":"","donate_link":"https:\/\/www.paypal.com\/cgi-bin\/webscr?cmd=_s-xclick&hosted_button_id=G65Y5CM3HVRNY","header_plugin_uri":"http:\/\/en.wp.obenland.it\/wp-approve-user\/#utm_source=wordpress&utm_medium=plugin&utm_campaign=wp-approve-user","header_author_uri":"http:\/\/en.wp.obenland.it\/#utm_source=wordpress&utm_medium=plugin&utm_campaign=wp-approve-user","rating":4.2,"author_block_rating":0,"active_installs":3000,"downloads":105298,"num_ratings":42,"support_threads":1,"support_threads_resolved":1,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0":{"tag":"1.0","author":"kobenland","date":"2012-01-30 08:32:55"},"1.1.0":{"tag":"1.1.0","author":"kobenland","date":"2012-02-24 20:03:25"},"1.1.1":{"tag":"1.1.1","author":"kobenland","date":"2012-03-05 10:59:28"},"10":{"tag":"10","author":"obenland","date":"2022-11-03 15:10:51"},"11":{"tag":"11","author":"obenland","date":"2026-04-15 19:09:14"},"12":{"tag":"12","author":"obenland","date":"2026-04-17 21:24:47"},"2.0.0":{"tag":"2.0.0","author":"kobenland","date":"2012-05-30 20:21:23"},"2.1.0":{"tag":"2.1.0","author":"kobenland","date":"2012-07-08 09:15:33"},"2.1.1":{"tag":"2.1.1","author":"kobenland","date":"2012-07-09 09:46:57"},"2.2.0":{"tag":"2.2.0","author":"kobenland","date":"2013-03-30 22:34:36"},"2.2.1":{"tag":"2.2.1","author":"kobenland","date":"2013-04-02 01:43:39"},"2.2.2":{"tag":"2.2.2","author":"kobenland","date":"2013-04-03 02:02:09"},"2.2.3":{"tag":"2.2.3","author":"obenland","date":"2013-08-22 13:46:38"},"2.4.0":{"tag":"2.4.0","author":"obenland","date":"2014-09-04 13:46:21"},"3":{"tag":"3","author":"obenland","date":"2017-12-21 23:25:33"},"4":{"tag":"4","author":"obenland","date":"2018-07-26 22:15:35"},"5":{"tag":"5","author":"obenland","date":"2018-08-03 22:23:36"},"6":{"tag":"6","author":"obenland","date":"2019-03-07 22:25:09"},"7":{"tag":"7","author":"obenland","date":"2020-11-23 22:16:14"},"8":{"tag":"8","author":"obenland","date":"2021-07-03 23:01:03"},"9":{"tag":"9","author":"obenland","date":"2022-11-03 14:14:52"}},"upgrade_notice":{"12":"<p>Migrates user approval data to a three-state system and adds a RESETLINK email placeholder. Back up before upgrading large installs.Updated registration flow, now sending out Core&#039;s password-creation email only after a registration was approved.\nWith this change, the minimum required version is now WordPress 4.3.<\/p>"},"ratings":{"1":7,"2":0,"3":2,"4":2,"5":31},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3013178,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3013178,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3013178,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3509310,"resolution":false,"location":"assets","locale":"","contents":"{\"landingPage\":\"\\\/wp-admin\\\/users.php\",\"preferredVersions\":{\"php\":\"8.0\",\"wp\":\"latest\"},\"steps\":[{\"step\":\"login\",\"username\":\"admin\",\"password\":\"password\"},{\"step\":\"setSiteOptions\",\"options\":{\"users_can_register\":\"1\"}},{\"step\":\"runPHP\",\"code\":\"<?php require_once 'wordpress\\\/wp-load.php'; $user_id = wp_insert_user( array( 'user_login' => 'test_user' ) ); update_user_meta( $user_id, 'wp-approve-user', false ); update_user_meta( $user_id, 'wp-approve-user-mail-sent', true );?>\"},{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"wp-approve-user\"},\"options\":{\"activate\":true}}]}"}},"all_blocks":[],"tagged_versions":null,"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3013169,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3013169,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3013169,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3013169,"resolution":"4","location":"assets","locale":""}},"screenshots":{"1":"Error message when user is not yet approved.","2":"Row action when user is approved","3":"Row action when user is not yet approved","4":"Count notification and row highlight for unapproved users"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[83,9450,602,2153,2461],"plugin_category":[38],"plugin_contributors":[77566],"plugin_business_model":[],"class_list":["post-16677","plugin","type-plugin","status-publish","hentry","plugin_tags-admin","plugin_tags-approve","plugin_tags-login","plugin_tags-user","plugin_tags-user-management","plugin_category-authentication","plugin_contributors-obenland","plugin_committers-obenland"],"banners":{"banner":"https:\/\/ps.w.org\/wp-approve-user\/assets\/banner-772x250.png?rev=3013178","banner_2x":"https:\/\/ps.w.org\/wp-approve-user\/assets\/banner-1544x500.png?rev=3013178","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/wp-approve-user\/assets\/icon-256x256.png?rev=3013178","icon_2x":"https:\/\/ps.w.org\/wp-approve-user\/assets\/icon-256x256.png?rev=3013178","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/wp-approve-user\/assets\/screenshot-1.png?rev=3013169","caption":"Error message when user is not yet approved."},{"src":"https:\/\/ps.w.org\/wp-approve-user\/assets\/screenshot-2.png?rev=3013169","caption":"Row action when user is approved"},{"src":"https:\/\/ps.w.org\/wp-approve-user\/assets\/screenshot-3.png?rev=3013169","caption":"Row action when user is not yet approved"},{"src":"https:\/\/ps.w.org\/wp-approve-user\/assets\/screenshot-4.png?rev=3013169","caption":"Count notification and row highlight for unapproved users"}],"raw_content":"<!--section=description-->\n<p>This plugin lets you approve or reject user registrations.\nWhile a user is unapproved, they can't access the WordPress Admin.<\/p>\n\n<p>On activation of the plugin, all existing users will automatically be flagged Approved. The site admin will never experience restricted access and does not need approval.\nThis plugin is probably not compatible with WooCommerce.<\/p>\n\n<h4>Translations<\/h4>\n\n<p>I will be more than happy to update the plugin with new locales, as soon as I receive them!\nCurrently available in:<\/p>\n\n<ul>\n<li>Dutch<\/li>\n<li>Deutsch<\/li>\n<li>English<\/li>\n<li>Hebrew<\/li>\n<li>Persian<\/li>\n<li>Russian<\/li>\n<\/ul>\n\n<h4>Plugin Hooks<\/h4>\n\n<h3>Actions<\/h3>\n\n<p><strong>wpau_approve<\/strong> (<em>int<\/em>)<\/p>\n\n<blockquote>\n  <p>User-ID of approved user.<\/p>\n<\/blockquote>\n\n<p><strong>wpau_unapprove<\/strong> (<em>int<\/em>)<\/p>\n\n<blockquote>\n  <p>User-ID of unapproved user.<\/p>\n<\/blockquote>\n\n<h3>Filter<\/h3>\n\n<p><strong>wpau_default_options<\/strong> (<em>array<\/em>)<\/p>\n\n<blockquote>\n  <p>Default options.<\/p>\n<\/blockquote>\n\n<p><strong>wpau_update_message_handler<\/strong> (<em>string<\/em>)<\/p>\n\n<blockquote>\n  <p>Allows to return custom update messages.<\/p>\n<\/blockquote>\n\n<p><strong>wpau_message_placeholders<\/strong> (<em>array<\/em>)<\/p>\n\n<blockquote>\n  <p>Filters the placeholders in approve\/unapprove emails.<\/p>\n<\/blockquote>\n\n<!--section=installation-->\n<ol>\n<li>Download WP Approve User.<\/li>\n<li>Unzip the folder into the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Make sure user registrations is enabled in 'General Settings'.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"once%20a%20new%20user%20has%20been%20approved%2C%20will%20the%20plugin%20send%20out%20an%20email%20to%20inform%20them%20they%20have%20been%20approved%3F\"><h3>Once a new user has been approved, will the plugin send out an email to inform them they have been approved?<\/h3><\/dt>\n<dd><p>Yes! Under Settings &gt; Approve User, you can choose when to send an email and customize the email content to your needs!<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>12<\/h4>\n\n<ul>\n<li>Bumped minimum required WordPress version to 4.7.<\/li>\n<li>Requires PHP 7.4 or later.<\/li>\n<li>Switches to a three-state approval system: approved, unapproved, and pending.<\/li>\n<li>When a user is unapproved, they now get immediately logged out from all active sessions.<\/li>\n<li>Uses a cron job to auto-approve more than 100 users asynchronously after plugin activation.<\/li>\n<li>Adds a <code>RESETLINK<\/code> email placeholder that sends users a one-time set\/reset-password URL. Props @helgatheviking.<\/li>\n<li>Pending count (not unapproved count) now drives the admin menu update bubble.<\/li>\n<li>After approving or unapproving the last user in a filtered view, the redirect now lands on All Users instead of an empty list.<\/li>\n<li>Migrates legacy boolean approval meta on upgrade: <code>true<\/code> becomes <code>approved<\/code> and <code>false<\/code> becomes <code>pending<\/code>.<\/li>\n<li>Fixes an issue where the upgrade routine re-ran on every admin page load due to a strict type comparison.<\/li>\n<li>Corrected text domain on the \"Pending\" and \"Unapproved\" view labels so they can be translated.<\/li>\n<li>Updated the login error and post-registration messages to be shorter and clearer.<\/li>\n<\/ul>\n\n<h4>11<\/h4>\n\n<ul>\n<li>Replaced image files with inline SVGs.<\/li>\n<li>Fixes a race condition with registering sidebar boxes between plugins I authored.<\/li>\n<\/ul>\n\n<h4>10<\/h4>\n\n<ul>\n<li>Fixes a bug with the activation hook creating class instances before it should. See https:\/\/wordpress.org\/support\/topic\/fatal-error-4281\/<\/li>\n<\/ul>\n\n<h4>9<\/h4>\n\n<ul>\n<li>No longer checks approval status on log in for super admins in multisite installations. See https:\/\/wordpress.org\/support\/topic\/super-admin-not-approved-on-multisite\/<\/li>\n<li>Fixes an incompatibility with WordPress 6.1 where the plugin would set up too early. See https:\/\/wordpress.org\/support\/topic\/fatal-error-4281\/<\/li>\n<\/ul>\n\n<h4>8<\/h4>\n\n<ul>\n<li>Does no longer overwrite approval status after plugin re-activation. Props @zadro, @idearius, @howdy_mcgee.<\/li>\n<\/ul>\n\n<h4>7<\/h4>\n\n<ul>\n<li>Added a filter to manipulate placeholders and their replacement values. See https:\/\/wordpress.org\/support\/topic\/customize-email-templates-2\/<\/li>\n<li>Only sends out rejection email if it's a new registration and the user is not approved. See https:\/\/wordpress.org\/support\/topic\/deleting-user-generates-user-not-approved-email-possible-to-disable-feature\/<\/li>\n<li>Various multisite improvements and bug fixes. The unapproved filter works now! See https:\/\/wordpress.org\/support\/topic\/multisite-issues-with-user-lists-and-unapproved-filter\/<\/li>\n<\/ul>\n\n<h4>6<\/h4>\n\n<ul>\n<li>Improved approval flow, waiting with password email until after approval.<\/li>\n<li>Fixed a bug where the approval email had some stray whitespace surrounding it.<\/li>\n<li>Tested for WordPress 5.2.<\/li>\n<\/ul>\n\n<h4>5<\/h4>\n\n<ul>\n<li>Fixed a bug where user registration couldn't be activated with the plugin active.<\/li>\n<\/ul>\n\n<h4>4<\/h4>\n\n<ul>\n<li>For easier on-boarding, it now displays a notice if user registration is disabled.<\/li>\n<\/ul>\n\n<h4>3<\/h4>\n\n<ul>\n<li>Maintenance release.<\/li>\n<li>Better multisite compatibility.<\/li>\n<li>Now maintains role selection on batch modification.<\/li>\n<li>Added some more sanitization.<\/li>\n<li>Updated code to adhere to WordPress Coding Standards.<\/li>\n<li>Tested for WordPress 5.0.<\/li>\n<\/ul>\n\n<h4>2.3<\/h4>\n\n<ul>\n<li>Added French translation. Props Clovis Darrigan.<\/li>\n<li>Added Arabic translation. Props Mehdi Bounya.<\/li>\n<\/ul>\n\n<h4>2.2.3<\/h4>\n\n<ul>\n<li>Fixes a bug where administrators where locked out of their site if user registration was enabled after the plugin was.<\/li>\n<\/ul>\n\n<h4>2.2.2<\/h4>\n\n<ul>\n<li>Adds backwards compatibility for WordPress versions pre-3.5 for the user list filter.<\/li>\n<li>Removes unused development versions of scripts and styles.<\/li>\n<\/ul>\n\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>Updated utility class.<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>Added a way to filter for unapproved users in the admin user list.<\/li>\n<li>Fixed a bug where currently active users would not be flagged as approved on activation if user registration was disabled.<\/li>\n<li>Added Dutch translation. Props Jos Wolbers.<\/li>\n<li>Minor coding convention updates to be closer to core coding guidelines.<\/li>\n<li>Tested with the beta version of 3.6.<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Fixed a bug, where new settings were not saved.<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Added Russian translation. Props Mick Levin.<\/li>\n<li>Email bodies can now be edited even when email notification is not activated.<\/li>\n<li>Fixed a bug, where admin notices by the Settings API were not displayed.<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Added the ability to send an email on approval\/unapproval. Email text can be customized.<\/li>\n<li>Optimized alteration of Users menu item. Props Rd.<\/li>\n<li>Added Hebrew translation. Props asafche.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fixed a bug, where the call to action bubble didn't account for newly registered.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Added bulk action for approving and unapproving users.<\/li>\n<li>Added notification of unapproved users in admin menu item (WordPress 3.2+).<\/li>\n<li>Added highlight of unapproved users.<\/li>\n<li>Added action hooks on (un-)approval. See hook reference.<\/li>\n<li>Users created by an Administrator will automatically be approved.<\/li>\n<li>Updated utilities class.<\/li>\n<li>Now an instance of the Obenland_Wp_Approve_User object ist stored in a static property to make deregistration of hooks easier.<\/li>\n<\/ul>\n\n<h4>1.0<\/h4>\n\n<ul>\n<li>Initial Release.<\/li>\n<\/ul>","raw_excerpt":"Adds action links to user table to approve or unapprove user registrations.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/16677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=16677"}],"author":[{"embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/obenland"}],"wp:attachment":[{"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=16677"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=16677"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=16677"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=16677"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=16677"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/kir.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=16677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}