{"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-03T11:50:08","modified_gmt":"2026-05-03T11:50:08","slug":"admin-filters-for-memberpress","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/admin-filters-for-memberpress\/","author":18083815,"comment_status":"closed","ping_status":"closed","template":"","meta":{"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-03 11:50:08","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":63,"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-03 11:50:08"}},"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 \u2014 address fields, MemberPress <strong>Settings \u2192 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 \u2014 address fields, MemberPress <strong>Settings \u2192 Fields<\/strong> fields, and <strong>Apply filters<\/strong>."}],"raw_content":"<!--section=description-->\n<p><strong>Admin Filters for MemberPress<\/strong> extends the <strong>MemberPress \u2192 Members<\/strong> admin screen with extra filters: MemberPress address fields (when your site captures them), every MemberPress registration <strong>Settings \u2192 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<p><strong>Requirements<\/strong><\/p>\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<p><strong>Privacy<\/strong><\/p>\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<p><strong>What you get (in plain terms)<\/strong><\/p>\n\n<ul>\n<li>Extra filter controls on the <strong>MemberPress \u2192 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<li><strong>Support:<\/strong> Use the <a href=\"https:\/\/wordpress.org\/support\/plugin\/admin-filters-for-memberpress\/\">Support forum<\/a> on wordpress.org for this plugin. MemberPress licensing and product support come from MemberPress \/ Caseproof.<\/li>\n<li><strong>Trademark:<\/strong> \"MemberPress\" is a trademark of its owner. This plugin is not affiliated with, endorsed by, or sponsored by MemberPress.<\/li>\n<li><strong>Developers:<\/strong> Filter hook for extra meta-based filters: <code>meprmf_members_meta_filters_fields<\/code>. Optional UI hook: <code>meprmf_use_floating_members_panel<\/code>. Repository and issues: see the <strong>Plugin URI<\/strong> \/ <strong>GitHub URI<\/strong> in the main plugin file header.<\/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 \u2192 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 \u2192 Settings \u2192 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=\"i%20enabled%20address%20on%20signup%20or%20account%20%E2%80%94%20why%20don%E2%80%99t%20i%20see%20address%20filters%3F\"><h3>I enabled address on signup or account \u2014 why don\u2019t I see address filters?<\/h3><\/dt>\n<dd><p>Address filters are added when MemberPress collects address (<strong>Show on Signup<\/strong> and\/or <strong>Show on Account<\/strong>). If you use the floating <strong>Filters<\/strong> panel, the plugin resets saved field visibility when the list of filter parameters changes so new fields are not left hidden by an older browser <code>localStorage<\/code> entry. Reload <strong>MemberPress \u2192 Members<\/strong> after changing MemberPress field settings.<\/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\n<\/dl>\n\n<!--section=changelog-->\n<p>This section follows the Version line in the main plugin file on the default branch. Version labels 1.6.3 and 1.6.4 were never used as semver bumps here (development went from 1.6.2 to 1.6.5). Commits that shipped on main while the header still read 1.5.0, before 1.6.1, are grouped under 1.5.0 so the git history is complete.<\/p>\n\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 \u2192 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 \u2192 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":"Filters MemberPress Members by address, custom fields, and optional meta. Uses MemberPress hooks only.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/305102","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=305102"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/omarelhawary"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=305102"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=305102"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=305102"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=305102"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=305102"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=305102"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}