{
    "name": "User Role Editor Pro",
    "version": "4.66.2",
    "homepage": "https:\/\/www.role-editor.com",
    "author": "Vladimir Garagulia",
    "author_homepage": "https:\/\/www.role-editor.com",
    "requires_php": "7.4",
    "requires": "4.7",
    "tested": "7.1",
    "sections": {
        "description": "<p>User Role Editor Pro WordPress plugin allows you to change user roles and capabilities easy.\nJust turn on check boxes of capabilities you wish to add to the selected role and click &quot;Update&quot; button to save your changes. That's done.\nAdd new roles and customize its capabilities according to your needs, from scratch of as a copy of other existing role.\nUnnecessary self-made role can be deleted if there are no users whom such role is assigned.\nRole assigned every new created user by default may be changed too.\nCapabilities could be assigned on per user basis. Multiple roles could be assigned to user simultaneously.\nYou can add new capabilities and remove unnecessary capabilities which could be left from uninstalled plugins.\nMulti-site support is provided.<\/p>",
        "installation": "<p>Installation procedure:<\/p>\n<ol>\n<li>Deactivate plugin if you have the previous version installed.<\/li>\n<li>Extract &quot;user-role-editor-pro.zip&quot; archive content to the &quot;\/wp-content\/plugins\/user-role-editor-pro&quot; directory.<\/li>\n<li>Activate &quot;User Role Editor Pro&quot; plugin via 'Plugins' menu in WordPress admin menu. <\/li>\n<li>Go to the &quot;Settings&quot;-&quot;User Role Editor&quot; and adjust plugin options according to your needs. For WordPress multisite URE options page is located under Network Admin Settings menu.<\/li>\n<li>Go to the &quot;Users&quot;-&quot;User Role Editor&quot; menu item and change WordPress roles and capabilities according to your needs.<\/li>\n<\/ol>\n<p>In case you have a free version of User Role Editor installed:\nPro version includes its own copy of a free version (or the core of a User Role Editor). So you should deactivate free version and can remove it before installing of a Pro version.\nThe only thing that you should remember is that both versions (free and Pro) use the same place to store their settings data.\nSo if you delete free version via WordPress Plugins Delete link, plugin will delete automatically its settings data. Changes made to the roles will stay unchanged.\nYou will have to configure lost part of the settings at the User Role Editor Pro Settings page again after that.\nRight decision in this case is to delete free version folder (user-role-editor) after deactivation via FTP, not via WordPress.<\/p>",
        "changelog": "<h4>[4.66.2] 15.09.2026<\/h4>\n<ul>\n<li>\n<p>Core version: 4.66.2<\/p>\n<\/li>\n<li>\n<p>Fix: Opening the &quot;Admin Menu&quot;, &quot;Plugins&quot;, &quot;Posts Edit&quot;, &quot;Posts View&quot;, &quot;Meta Boxes&quot;, &quot;Widgets Admin&quot;, &quot;Nav Menus&quot;, &quot;Other Roles&quot;, &quot;Gravity Forms Access&quot; or &quot;Import Role&quot; dialog from the role editor toolbar threw a JavaScript &quot;ure_ui_button_text is not defined&quot; error and left the dialog's buttons unstyled, caused by the 4.66.1 core ure.js refactor renaming that helper to ure_main.ui_button_text() without updating these Pro-only add-on scripts.<\/p>\n<h4>[4.66.1] 15.09.2026<\/h4>\n<\/li>\n<li>\n<p>Core version: 4.66.2<\/p>\n<\/li>\n<li>\n<p>Security: Broad output-escaping, input-sanitization, and SQL-query-preparation hardening pass across the Pro-only code, following a full WordPress.org Plugin Check audit.<\/p>\n<\/li>\n<li>\n<p>Fix: A late static binding bug in URE_Core::valid_php_version()\/valid_wordpress_version() (self:: instead of static::) silently ignored Pro's overridden minimum required WordPress version.<\/p>\n<\/li>\n<li>\n<p>Fix: &quot;Other Roles Access&quot; and &quot;Posts Edit Access&quot; add-ons used an invalid SQL placeholder that quoted an already-prepared, comma-separated ID list as a single string, silently breaking the &quot;exclude users with blocked roles&quot; admin filtering and the &quot;auto-assign default term&quot; logic for new posts.<\/p>\n<\/li>\n<li>\n<p>Fix: Three strings across the &quot;Widgets Show\/Admin Access&quot; and &quot;Front-End Menu Access&quot; add-ons used a mistyped text domain, so they were never translated.<\/p>\n<\/li>\n<li>\n<p>Fix: &quot;Widgets Admin Access&quot; add-on called an internal-use-only WordPress function; replaced with a safe equivalent.<\/p>\n<\/li>\n<li>\n<p>Fix: &quot;Front-End Menu Access&quot; add-on was missing a check on a submitted menu item value.<\/p>\n<\/li>\n<li>\n<p>Fix: Multisite role import now checks the target site actually exists before querying its data, instead of relying on a raw database error for a nonexistent site.<\/p>\n<\/li>\n<li>\n<p>Update: Redirects to same-site URLs now use wp_safe_redirect(); deprecated\/discouraged PHP and WordPress function calls (get_terms(), parse_url(), unlink(), date()) were replaced with their recommended equivalents across several add-ons.<\/p>\n<\/li>\n<li>\n<p>Fix: Posts edit access add-on: Selected post types were not saved at user profile.<\/p>\n<\/li>\n<li>\n<p>Core version was update to 4.66.2<\/p>\n<\/li>\n<li>\n<p>Fix: &quot;Add Role&quot; dialog kept showing the previously entered Role name (ID) and Display Role Name after a role was added, instead of blank fields.<\/p>\n<\/li>\n<li>\n<p>Update: &quot;Delete Role&quot; dialog now lists deletable roles in a checkbox table (Role Name \/ Role ID columns) instead of a single-select dropdown, so multiple roles can be deleted in one action; the old &quot;Delete All Unused Roles&quot; option is replaced by a &quot;select all&quot; checkbox in the table header.<\/p>\n<\/li>\n<li>\n<p>Update: &quot;Delete Capability&quot; dialog now has a &quot;Quick Filter&quot; text field next to its &quot;select all&quot; checkbox, to narrow down the capability list the same way the main page's &quot;Quick filter&quot; field does.<\/p>\n<\/li>\n<li>\n<p>Update: The multisite &quot;Allow non super administrators to create, edit, and delete users&quot; option is narrowed to &quot;Allow non super administrators to edit users&quot;. The &quot;create&quot; part duplicated WordPress core's own &quot;Allow site administrators to add new users to their site via the 'Users -&gt; Add User' page&quot; network setting, and the &quot;delete&quot; part granted a capability that WordPress core never actually lets a single site administrator exercise (user deletion is blocked outside Network Admin regardless of capability) - both are dropped, along with the temporary superadmin-impersonation workaround they relied on.<\/p>\n<\/li>\n<li>\n<p>Update: Plugin's own core JavaScript files (ure.js, settings.js, users.js, user-profile-other-roles.js, users-grant-roles.js) now have minified .min.js builds, generated with esbuild; each is enqueued via WordPress's SCRIPT_DEBUG constant, same convention already used for the vendored notify.js\/multiple-select.js (unminified source when SCRIPT_DEBUG is on, minified build otherwise).<\/p>\n<\/li>\n<li>\n<p>Update: Plugin's own core CSS (css\/ure-admin.css) now has a minified .min.css build, generated with esbuild; it's enqueued via WordPress's SCRIPT_DEBUG constant, same convention already used for the plugin's own JS files (unminified source when SCRIPT_DEBUG is on, minified build otherwise).<\/p>\n<\/li>\n<li>\n<p>Update: js\/users-grant-roles.js's loose global functions (Grant Roles dialog, Add\/Revoke role buttons on the Users page) were consolidated into a single URE_Users_Grant_Roles object.<\/p>\n<\/li>\n<li>\n<p>Update: Replaced the deprecated jQuery .click()\/.click(fn) event-binding shorthand with .on('click', fn) in users-grant-roles.js and users.js, clearing a jQuery Migrate deprecation warning on the Users page.<\/p>\n<\/li>\n<li>\n<p>Update: js\/users.js's loose global functions (the &quot;Without role&quot; button's dialog on the Users page) were consolidated into a single URE_No_Role_Users object; the button's onclick markup in URE_Assign_Role::show_html() was updated to match.<\/p>\n<\/li>\n<li>\n<p>Update: js\/user-profile-other-roles.js's loose global functions (the user profile &quot;Other Roles&quot; multi-select control) were consolidated into a single URE_User_Profile_Other_Roles object.<\/p>\n<\/li>\n<li>\n<p>Update: js\/settings.js's loose global functions (the Settings page's &quot;Reset User Roles&quot; confirmation dialog) were consolidated into a single URE_Settings object.<\/p>\n<h4>[4.66] 25.08.2026<\/h4>\n<\/li>\n<li>\n<p>Core version: 4.66.1<\/p>\n<\/li>\n<li>\n<p>Update: Marked as compatible with WordPress 7.1<\/p>\n<\/li>\n<li>\n<p>Required PHP version increased up to 7.4<\/p>\n<\/li>\n<li>\n<p>Update: Plugin loading code is enhanced. <\/p>\n<\/li>\n<li>\n<p>Update: Plugin does not use self-defined PHP global constants. Needed data moved inside classes.<\/p>\n<\/li>\n<li>\n<p>Update: &quot;Admin menu access&quot; add-on: White list of URL arguments allowed by default for WooCommerce products and shop orders list pages was updated.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Assign_Role_Pro::get_users_queued() referenced an undefined constant instead of self::CRON_ACTION_HOOK.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Assign_Role_Pro::assign_role_to_user() used a loose in_array() check against $user-&gt;caps that was always true, so the background role-assignment feature never actually assigned the role; now correctly checks $user-&gt;roles.<\/p>\n<\/li>\n<li>\n<p>Fix: &quot;Posts Edit Access&quot; bulk action's user ID list could contain stray whitespace instead of clean integers; user IDs are now properly cast to int.<\/p>\n<\/li>\n<li>\n<p>Update: URE_Uninstall_Pro::init_options_list() now references addon classes own *_KEY constants instead of duplicating their option name strings.<\/p>\n<\/li>\n<li>\n<p>Fix: activating Pro while the free plugin was already active still left both active in some load orders, because URE_Core_Pro::init() (which registered the fix above) was itself skipped when the free plugin had already defined URE_Loader\/URE_Core earlier in the same request; the activation-hook registration now happens unconditionally via a standalone function in the main plugin file.<\/p>\n<\/li>\n<li>\n<p>Core version was updated to 4.66.1<\/p>\n<\/li>\n<li>\n<p>Update: URE_Admin_Notice class output was escaped with esc_attr(), wp_kses_post() functions.<\/p>\n<\/li>\n<li>\n<p>Security Fix: SQL queries in URE_Editor::direct_network_roles_update() and leave_roles_for_blog() are passed to $wpdb-&gt;prepare() with real %s placeholders.<\/p>\n<\/li>\n<li>\n<p>Security Fix: URE_Editor::get_caps_columns_quant() now requires a valid nonce before writing a display-preference transient from $_POST, closing a minor CSRF gap.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Protect_Admin used a bitwise &quot;&amp;&quot; instead of a logical &quot;&amp;&amp;&quot; when checking a capabilities array, which could throw a PHP 8 TypeError; fixed to use &quot;&amp;&amp;&quot;, and the related IN() SQL clause is now hardened with array_map('absint', ...).<\/p>\n<\/li>\n<li>\n<p>Update: nonce actions used on the Settings\/Tools pages are now scoped per form (ure_settings_update, ure_addons_settings_update, ure_default_roles_update, ure_settings_ms_update, ure_settings_tools_exec) instead of one shared string.<\/p>\n<\/li>\n<li>\n<p>Update: additional output escaping was added across URE_View, URE_Role_View and URE_Role_Additional_Options (role\/capability slugs, wp_json_encode() instead of json_encode(), esc_url() on form actions), plus a defense-in-depth capability check in URE_Role_Additional_Options::save().<\/p>\n<\/li>\n<li>\n<p>Update: rel=&quot;noopener noreferrer&quot; was added to external links opened with target=&quot;_new&quot;.<\/p>\n<\/li>\n<li>\n<p>Update: hardcoded text strings in the role editor toolbar are now translatable.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Assign_Role used the %i SQL placeholder, which needs WordPress 6.2+, below the plugin's declared minimum; replaced with direct interpolation of internal table names.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Editor::reset_user_roles() had an unescaped wp_die() message; further output escaping (esc_url(), esc_html(), absint()) was added across URE_Base_Lib, URE_Editor, URE_User_Other_Roles and URE_User_View.<\/p>\n<\/li>\n<li>\n<p>Fix: several request-var\/database-result comparisons that could be bypassed by PHP type juggling are now strict, including URE_Grant_Roles::is_try_remove_admin_from_himself()'s &quot;can't remove your own admin role&quot; check.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Base_Lib::set() now correctly rejects unknown properties instead of silently creating them; URE_View declares its $advert property explicitly.<\/p>\n<\/li>\n<li>\n<p>Update: $_SERVER['REQUEST_URI'] is now validated and unslashed before sanitizing in URE_Lib::is_right_admin_path() and URE_User_Other_Roles::is_user_profile_extention_allowed().<\/p>\n<\/li>\n<li>\n<p>Update: posted role IDs are now sanitized (sanitize_key(), wp_unslash()) in URE_Editor, and its 'object'\/role-selection request parameters are constrained to known values.<\/p>\n<\/li>\n<li>\n<p>Update: URE_Base_Lib::get_blog_ids() now uses get_sites() instead of a raw database query.<\/p>\n<\/li>\n<li>\n<p>Update: URE_Capability::revoke_caps() now uses get_users() instead of a raw database query.<\/p>\n<\/li>\n<li>\n<p>Update: URE_Protect_Admin::has_administrator_role() now uses user_can() instead of a raw database query.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Assign_Role::$lib property was changed to protected.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Uninstall::delete_options() private function changed to protected.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Uninstall::init_options_list() referenced 'ure_task_queue', which never matched URE_Task_Queue::OPTION_NAME ('ure_tasks_queue'), so that option was never deleted on uninstall.<\/p>\n<\/li>\n<li>\n<p>Fix: URE_Core::define_files() - class URE_Uninstall was not added correctly, null was written instead of class name.<\/p>\n<\/li>\n<li>\n<p>Fix: activating Pro while the free version was already active caused a fatal &quot;Cannot redeclare ure_log_error()&quot; error; the function declaration is now guarded with function_exists().<\/p>\n<\/li>\n<li>\n<p>Fix: activating this plugin while the paired Pro plugin was already active silently left both active instead of deactivating the paired one, because the register_activation_hook() call never ran in that request; it's now registered as a standalone function directly in the main plugin file, ahead of the class_exists('URE_Loader') guard that was skipping it.<\/p>\n<h4>[4.65] 21.05.2026<\/h4>\n<\/li>\n<li>\n<p>Core version: 4.65<\/p>\n<\/li>\n<li>\n<p>Update: Marked as compatible with WordPress 7.0<\/p>\n<\/li>\n<li>\n<p>Update: Minor fixes to pages markup are applied to correspond WordPress 7.0 CSS changes. <\/p>\n<\/li>\n<li>\n<p>Update: &quot;defined('ABSPATH')&quot;\u00a0guard was added to all PHP files to exclude PHP files direct execution. <\/p>\n<\/li>\n<li>\n<p>Update: sanitize_text_field(), sanitize_key(), sanitize_url() functions are used to secure user input before processing.<\/p>\n<\/li>\n<li>\n<p>Update: _nonce field checking was added before data update in addition checking made already on the higher level.<\/p>\n<\/li>\n<li>\n<p>Core version was updated to 4.65<\/p>\n<\/li>\n<li>\n<p>Fix: Users-&gt;User Role Editor-&gt;Import: single user role was imported successfully but the empty page was shown instead of URE page with successful import notification.<\/p>\n<\/li>\n<li>\n<p>Fix: Meta Boxes Access add-on: WP Multisite: Network Admin-&gt;Users-&gt;User Role Editor-&gt;Meta Boxes: current role does not lose now all capabilities after the 'Update' button click.<\/p>\n<\/li>\n<li>\n<p>Fix: Other Roles Access add-on: WP Multisite: Network Admin-&gt;Users-&gt;User Role Editor-&gt;Other Roles: current role does not lose now all capabilities after the 'Update' button click.<\/p>\n<\/li>\n<li>\n<p>Fix: Posts Edit Access add-on: WP Multisite: Network Admin-&gt;Users-&gt;User Role Editor-&gt;Posts Edit: current role does not lose now all capabilities after the 'Update' button click.<\/p>\n<\/li>\n<li>\n<p>Fix: Plugins Access add-on: WP Multisite: Network Admin-&gt;Users-&gt;User Role Editor-&gt;Plugins: current role does not lose now all capabilities after the 'Update' button click.<\/p>\n<\/li>\n<li>\n<p>Fix: Export roles CSV download file with .pdf extension in the FireFox browser. Content type header was replaced to 'text\/plain'.<\/p>\n<\/li>\n<li>\n<p>Update: Meta Boxes Access add-on: data is updated via AJAX without full page refresh now.<\/p>\n<\/li>\n<li>\n<p>Update: Other Roles Access add-on: data is updated via AJAX without full page refresh now.<\/p>\n<\/li>\n<li>\n<p>Update: Posts Edit Access add-on: data for role is updated without full page refresh  via AJAX now.<\/p>\n<\/li>\n<li>\n<p>Update: Plugins Access add-on: data is updated via AJAX without full page refresh  now.<\/p>\n<\/li>\n<li>\n<p>Update: Import role CSV: uploaded file .csv extention and mime type checking were added.<\/p>\n<\/li>\n<li>\n<p>Update: &quot;Users-&gt;User Role Editor-&gt;Import&quot; button is hidden in case page is opened from the WP Multisite -&gt; Network admin. Use it from the selected single site only.<\/p>\n<\/li>\n<\/ul>\n<p>Full list of changes is available in changelog.txt file.<\/p>"
    },
    "last_updated": "2026-09-15 12:11:33",
    "slug": "user-role-editor-pro",
    "license_state": "invalid",
    "request_time_elapsed": "0.002"
}