{"id":305102,"date":"2026-05-03T11:29:37","date_gmt":"2026-05-03T11:29:37","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/admin-filters-for-memberpress\/"},"modified":"2026-05-07T08:45:14","modified_gmt":"2026-05-07T08:45:14","slug":"admin-filters-for-memberpress","status":"publish","type":"plugin","link":"https:\/\/br.wordpress.org\/plugins\/admin-filters-for-memberpress\/","author":18083815,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"1.6.8","stable_tag":"1.6.8","tested":"6.9.4","requires":"5.6","requires_php":"8.1","requires_plugins":null,"header_name":"Admin Filters for MemberPress","header_author":"Omar ElHawray","header_description":"Adds address and MemberPress custom-field filters to the MemberPress Members admin list. Codebase refactored for Transactions and Subscriptions in upcoming releases. Uses MemberPress hooks only.","assets_banners_color":"1f3a5c","last_updated":"2026-05-07 08:45:14","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/admin-filters-for-memberpress\/","header_author_uri":"https:\/\/omarelhawary.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":74,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.6.7":{"tag":"1.6.7","author":"omarelhawary","date":"2026-05-03 11:29:57"},"1.6.8":{"tag":"1.6.8","author":"omarelhawary","date":"2026-05-07 08:45:14"}},"upgrade_notice":{"1.6.7":"<p>Maintenance release: output hardening, languages folder layout for WordPress.org checks, and translation loading alignment. No settings migration.<\/p>","1.6.6":"<p>Text domain matches the plugin slug; rename custom MO\/PO to admin-filters-for-memberpress-* if needed. If you used the old meta-filters hook, change it to meprmf_members_meta_filters_fields. Plugin URI and GitHub URI in the plugin header were updated.<\/p>","1.6.5":"<p>Floating Filters panel and account-page address visibility. No database migration; clear browser storage only if you need to reset panel field visibility.<\/p>","1.6.2":"<p>Requires PHP 8.1 or newer. Upgrade PHP before updating the plugin if you are still on 7.4.<\/p>","1.6.1":"<p>Replaced folder memberpress-members-meta-filters with admin-filters-for-memberpress. Deactivate, remove the old folder, install the new path, activate. MemberPress settings unchanged. Old hook mepr_members_meta_filters_fields is now meprmf_members_meta_filters_fields.<\/p>","1.5.0":"<p>Adds address filter query parameters (<code>mpf_state<\/code>, <code>mpf_zip<\/code>, etc.). Bookmarks or saved admin URLs from 1.4.0 still work for country\/city; no migration required.<\/p>","1.4.0":"<p>Declares WordPress 5.6+ and PHP 7.4+ in the plugin header. Ensure your host meets PHP 7.4 before updating from 1.3.0.<\/p>","1.3.0":"<p>First install: no prior version. Requires MemberPress.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3521433,"resolution":"128x128","location":"assets","locale":""},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3521433,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3521433,"resolution":"1544x500","location":"assets","locale":""},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3521433,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.6.7","1.6.8"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3521433,"resolution":"1","location":"assets","locale":""}},"screenshots":{"1":"MemberPress <strong>Members<\/strong> admin list with the <strong>Filters<\/strong> panel open: address fields, MemberPress <strong>Settings -&gt; Fields<\/strong> fields, and <strong>Apply filters<\/strong>."},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[83,2755,15170,1919,1932],"plugin_category":[58],"plugin_contributors":[255096],"plugin_business_model":[],"class_list":["post-305102","plugin","type-plugin","status-publish","hentry","plugin_tags-admin","plugin_tags-filters","plugin_tags-memberpress","plugin_tags-members","plugin_tags-membership","plugin_category-user-management","plugin_contributors-omarelhawary","plugin_committers-omarelhawary"],"banners":{"banner":"https:\/\/ps.w.org\/admin-filters-for-memberpress\/assets\/banner-772x250.png?rev=3521433","banner_2x":"https:\/\/ps.w.org\/admin-filters-for-memberpress\/assets\/banner-1544x500.png?rev=3521433","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/admin-filters-for-memberpress\/assets\/icon-128x128.png?rev=3521433","icon_2x":"https:\/\/ps.w.org\/admin-filters-for-memberpress\/assets\/icon-256x256.png?rev=3521433","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/admin-filters-for-memberpress\/assets\/screenshot-1.png?rev=3521433","caption":"MemberPress <strong>Members<\/strong> admin list with the <strong>Filters<\/strong> panel open: address fields, MemberPress <strong>Settings -&gt; Fields<\/strong> fields, and <strong>Apply filters<\/strong>."}],"raw_content":"<!--section=description-->\n<p><strong>Admin Filters for MemberPress<\/strong> extends the <strong>MemberPress -&gt; Members<\/strong> admin screen with extra filters: MemberPress address fields (when your site captures them), every MemberPress registration <strong>Settings -&gt; Fields<\/strong> field, and any further <strong>user meta<\/strong> filters you add with the <code>meprmf_members_meta_filters_fields<\/code> filter (for example in a small custom plugin).<\/p>\n\n<p>This plugin is an independent project. It is <strong>not<\/strong> affiliated with, endorsed by, or sponsored by MemberPress.<\/p>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.6 or newer and PHP 8.1 or newer.<\/li>\n<li>A working install of <strong>MemberPress<\/strong>. This extension does not ship MemberPress and cannot run without it.<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>Filtering reads values you or your administrators submit on the Members list (standard admin <code>GET<\/code> requests) and builds SQL <code>EXISTS<\/code> conditions on <code>wp_usermeta<\/code> scoped to the list query. No data is sent to external services by this plugin.<\/p>\n\n<h4>What you get<\/h4>\n\n<ul>\n<li>Extra filter controls on the <strong>MemberPress -&gt; Members<\/strong> screen so you can narrow the member list by address, registration fields, and (optionally) other stored member data you wire in with code.<\/li>\n<li>The member list itself still works like MemberPress; this plugin only adds filtering options for administrators.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin files to the <code>\/wp-content\/plugins\/admin-filters-for-memberpress<\/code> directory, or install the plugin through the WordPress plugins screen directly.<\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> screen in WordPress.<\/li>\n<li>Ensure <strong>MemberPress<\/strong> is already installed and active. If MemberPress is inactive, this plugin does nothing.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20include%20memberpress%3F\"><h3>Does this plugin include MemberPress?<\/h3><\/dt>\n<dd><p>No. You must purchase and install MemberPress separately. This plugin only adds filters to the Members admin list when MemberPress is active.<\/p><\/dd>\n<dt id=\"where%20do%20i%20use%20the%20filters%3F\"><h3>Where do I use the filters?<\/h3><\/dt>\n<dd><p>In the WordPress admin, open <strong>MemberPress -&gt; Members<\/strong>. Use the <strong>Filters<\/strong> area above the table to choose criteria, then apply them to refresh the list.<\/p><\/dd>\n<dt id=\"what%20can%20i%20filter%20members%20by%3F\"><h3>What can I filter members by?<\/h3><\/dt>\n<dd><ul>\n<li><strong>Address<\/strong> fields when your site collects them in MemberPress (for example country, city, postal code), including when address is captured on the account page.<\/li>\n<li>Every field you configure under <strong>MemberPress -&gt; Settings -&gt; Fields<\/strong> (registration \/ profile style fields).<\/li>\n<li><strong>Extra user meta<\/strong> only if a developer adds filter definitions using the <code>meprmf_members_meta_filters_fields<\/code> filter hook (for data stored in <code>wp_usermeta<\/code> that is not already covered).<\/li>\n<\/ul><\/dd>\n<dt id=\"does%20this%20change%20my%20public%20website%20or%20checkout%3F\"><h3>Does this change my public website or checkout?<\/h3><\/dt>\n<dd><p>No. It only affects the <strong>admin<\/strong> Members list. Visitors and the front of your site are unchanged.<\/p><\/dd>\n<dt id=\"is%20member%20data%20sent%20to%20a%20third-party%20service%3F\"><h3>Is member data sent to a third-party service?<\/h3><\/dt>\n<dd><p>No. Filtering runs inside your WordPress install and database. See the <strong>Privacy<\/strong> note in the description above.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20memberpress%20is%20turned%20off%3F\"><h3>What happens if MemberPress is turned off?<\/h3><\/dt>\n<dd><p>The plugin waits quietly. Once MemberPress is active again, the filters show on <strong>Members<\/strong> as before.<\/p><\/dd>\n<dt id=\"where%20do%20i%20get%20support%20for%20this%20plugin%3F\"><h3>Where do I get support for this plugin?<\/h3><\/dt>\n<dd><p>Use the <a href=\"https:\/\/wordpress.org\/support\/plugin\/admin-filters-for-memberpress\/\">Support forum<\/a> on WordPress.org for <strong>Admin Filters for MemberPress<\/strong>.<\/p><\/dd>\n<dt id=\"how%20do%20developers%20extend%20the%20filters%3F\"><h3>How do developers extend the filters?<\/h3><\/dt>\n<dd><ul>\n<li>Filter hook for extra meta-based filter definitions: <code>meprmf_members_meta_filters_fields<\/code>.<\/li>\n<li>Optional UI hook (floating <strong>Filters<\/strong> panel vs inline toolbar): <code>meprmf_use_floating_members_panel<\/code>.<\/li>\n<li>Source and issues: see <strong>Plugin URI<\/strong> and <strong>GitHub URI<\/strong> in the main plugin file header (<code>admin-filters-for-memberpress.php<\/code>).<\/li>\n<\/ul><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.6.8<\/h4>\n\n<ul>\n<li>Floating Filters panel: when the set of filter query params changes (for example after enabling MemberPress <strong>Show on Account<\/strong> or <strong>Show on Signup<\/strong> for address), reset saved field visibility so new address filters are not left hidden by an older <code>localStorage<\/code> whitelist.<\/li>\n<li>Members provider: document address toggles explicitly; add a unit test for signup-only address capture.<\/li>\n<\/ul>\n\n<h4>1.6.7<\/h4>\n\n<ul>\n<li>Improve escaping in Members filter controls (WordPress Plugin Check \/ PHPCS).<\/li>\n<li>Replace the languages directory placeholder with a non-hidden <code>index.php<\/code> so release zips avoid dotfiles flagged by Plugin Check.<\/li>\n<li>Drop redundant <code>load_plugin_textdomain()<\/code>; WordPress.org installs load translations automatically (WordPress 4.6+).<\/li>\n<li>Clarify read-only admin <code>GET<\/code> usage for script loading and filter query parameters where static analysis required it.<\/li>\n<li>Toolbar renderer: clearer attribute handling and inline documentation for SQL \/ predicate behavior; document WordPress.org banner\/icon layout under <code>wordpress-org-assets\/<\/code>.<\/li>\n<li>README (GitHub): structure and screenshot guidance refresh.<\/li>\n<\/ul>\n\n<h4>1.6.6<\/h4>\n\n<ul>\n<li>WordPress.org packaging: add <code>readme.txt<\/code>, align the text domain with the plugin slug (<code>admin-filters-for-memberpress<\/code>), and clarify third-party \/ trademark disclaimer.<\/li>\n<li>Remove the <code>Requires Plugins: memberpress<\/code> header because MemberPress is not distributed from the wordpress.org plugin directory (dependency is documented here instead).<\/li>\n<li>Track a <code>languages\/<\/code> directory for translation drops (initial placeholder before the 1.6.7 <code>index.php<\/code> layout).<\/li>\n<li>Release hygiene: tighten <code>.gitignore<\/code>, extend <code>scripts\/build-release.sh<\/code>, and align <code>readme.txt<\/code> \/ README notes with the zip build and WordPress.org upload flow.<\/li>\n<li>WordPress.org review: set Plugin URI to the plugin directory listing; correct GitHub repository URL in plugin header and developer metadata (<code>composer.json<\/code> \/ README where applicable).<\/li>\n<li>Prefix compliance: rename the custom extension filter from <code>mepr_members_meta_filters_fields<\/code> to <code>meprmf_members_meta_filters_fields<\/code>. If you added filters in code, update your <code>add_filter<\/code> hook name.<\/li>\n<\/ul>\n\n<h4>1.6.5<\/h4>\n\n<ul>\n<li>Floating <strong>Filters<\/strong> panel on <strong>MemberPress -&gt; Members<\/strong> (field visibility in the browser via <code>localStorage<\/code>; filter <code>meprmf_use_floating_members_panel<\/code> to use the previous inline toolbar).<\/li>\n<li>Address filters when MemberPress captures address on the <strong>account<\/strong> page only (not only at checkout).<\/li>\n<li>Refine filter control rendering for the floating panel.<\/li>\n<li>Style: toggle control layout and icon dimensions on the Members filters UI.<\/li>\n<li>README guidance for when to use extra user-meta filters vs MemberPress <strong>Settings -&gt; Fields<\/strong>; slightly smaller Members toolbar typography for alignment.<\/li>\n<\/ul>\n\n<h4>1.6.2<\/h4>\n\n<ul>\n<li>Raise minimum PHP to <strong>8.1<\/strong> (was 7.4). WordPress <strong>5.6+<\/strong> requirement unchanged.<\/li>\n<li>Run PHPUnit \/ CI on PHP 8.1 through 8.3.<\/li>\n<li>Skipped semver labels: 1.6.3 and 1.6.4 were not published from this repository; the next version after 1.6.2 was 1.6.5.<\/li>\n<\/ul>\n\n<h4>1.6.1<\/h4>\n\n<ul>\n<li>Rebrand and paths: plugin folder <strong><code>admin-filters-for-memberpress<\/code><\/strong>, main file <strong><code>admin-filters-for-memberpress.php<\/code><\/strong> (formerly <em>MemberPress Members Meta Filters<\/em> \/ <code>memberpress-members-meta-filters.php<\/code>).<\/li>\n<li>Refactor monolithic bootstrap into <strong><code>includes\/<\/code><\/strong> classes with a compatibility layer in <strong><code>compat\/legacy-functions.php<\/code><\/strong> so existing <code>meprmf_*<\/code> snippets keep working.<\/li>\n<li>Add <strong><code>uninstall.php<\/code><\/strong> for option cleanup on delete; remove redundant <code>register_uninstall_hook<\/code> usage.<\/li>\n<li>Add PHPUnit suite, <code>phpunit.xml.dist<\/code>, and GitHub Actions workflow.<\/li>\n<li>Consolidate filter field definition validation (duplicate <code>meta_key<\/code> rows, select rows missing choices, duplicate dropdown keys) and related helpers.<\/li>\n<\/ul>\n\n<h4>1.5.0<\/h4>\n\n<ul>\n<li>Full MemberPress <strong>address<\/strong> filters: <strong>state\/province<\/strong>, <strong>zip\/postal code<\/strong>, and <strong>address lines 1 &amp; 2<\/strong> (in addition to country and city).<\/li>\n<li>Filter hook <strong><code>meprmf_include_address_filters<\/code><\/strong> to control when built-in address filters are shown (default follows MemberPress address capture settings).<\/li>\n<li>Prefer MemberPress-configured address field labels when available.<\/li>\n<li><p>Plugin header: Author URI and GitHub repository URI.<\/p><\/li>\n<li><p>Pre-1.6.1 while the header still read 1.5.0 (monolithic memberpress-members-meta-filters.php): README sync \u2014 metadata and changelog match the shipped 1.4.0\/1.5.0 feature set; document all six address filter fields.<\/p><\/li>\n<li>Uninstall: move option cleanup to <code>uninstall.php<\/code> and remove redundant <code>register_uninstall_hook<\/code> usage.<\/li>\n<li>Refactor: replace magic numbers with named constants; document maximum lengths enforced when validating filter <code>param<\/code> values.<\/li>\n<li>Refactor: extract <code>meprmf_normalize_filter_fields()<\/code> (and related helpers) for shared filter field validation.<\/li>\n<li>Merge <code>develop<\/code> (pull request #1): consolidate validation and handling for configured meta filters ahead of the rebrand.<\/li>\n<\/ul>\n\n<h4>1.4.0<\/h4>\n\n<ul>\n<li>Declare <strong>Requires at least: 5.6<\/strong> and <strong>Requires PHP: 7.4<\/strong> in the plugin header.<\/li>\n<li>Guard plugin constants with <code>defined()<\/code> checks so they are not redefined.<\/li>\n<li>Load a text domain from the <strong><code>languages\/<\/code><\/strong> directory.<\/li>\n<li>On uninstall, remove leftover plugin options when the plugin is deleted from wp-admin (<code>uninstall.php<\/code>).<\/li>\n<li>Stricter sanitization when normalizing filter field definitions: skip duplicate <code>meta_key<\/code> rows, require choices for select-type rows, and handle duplicate option keys in dropdown definitions.<\/li>\n<\/ul>\n\n<h4>1.3.0<\/h4>\n\n<ul>\n<li>Initial release (as <em>MemberPress Members Meta Filters<\/em>): filters on the MemberPress <strong>Members<\/strong> admin list for <strong>country<\/strong>, <strong>city<\/strong>, and <strong>MemberPress custom fields<\/strong> (dropdown, radios, multiselect, checkboxes, checkbox, and text-style field types mapped to sensible controls).<\/li>\n<li>Apply list constraints via <strong><code>EXISTS<\/code><\/strong> subqueries on <strong><code>wp_usermeta<\/code><\/strong> through <strong><code>mepr_list_table_args<\/code><\/strong>, scoped to the Members list query.<\/li>\n<li>Compact collapsible filter layout when many filters are active (threshold filterable in later releases).<\/li>\n<\/ul>","raw_excerpt":"Adds admin filters on the MemberPress Members list (address, registration fields, optional custom meta). Requires MemberPress.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/305102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=305102"}],"author":[{"embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/omarelhawary"}],"wp:attachment":[{"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=305102"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=305102"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=305102"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=305102"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=305102"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/br.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=305102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}