Created
August 27, 2025 09:02
-
-
Save daveloodts/5f64ae6ec353a5968a41d7cdc3c0b17f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* View-tabs + filters: | |
* - Customers zonder naam | |
* - Subscribers zonder naam | |
*/ | |
// 1) View-links met teller | |
add_filter('views_users', function ($views) { | |
global $wpdb; | |
$cap_key = $wpdb->get_blog_prefix() . 'capabilities'; | |
// === Customers zonder naam === | |
$count_customers = (int) $wpdb->get_var( $wpdb->prepare(" | |
SELECT COUNT(DISTINCT u.ID) | |
FROM {$wpdb->users} u | |
INNER JOIN {$wpdb->usermeta} cap | |
ON cap.user_id = u.ID AND cap.meta_key = %s | |
LEFT JOIN {$wpdb->usermeta} fn | |
ON fn.user_id = u.ID AND fn.meta_key = 'first_name' | |
LEFT JOIN {$wpdb->usermeta} ln | |
ON ln.user_id = u.ID AND ln.meta_key = 'last_name' | |
WHERE cap.meta_value LIKE %s | |
AND (fn.meta_value IS NULL OR fn.meta_value = '') | |
AND (ln.meta_value IS NULL OR ln.meta_value = '') | |
", $cap_key, '%"customer"%') ); | |
$url_customers = add_query_arg( | |
['role' => 'customer', 'no_name' => '1'], | |
admin_url('users.php') | |
); | |
$current_customers = ( | |
isset($_GET['no_name']) && $_GET['no_name'] === '1' | |
&& isset($_GET['role']) && $_GET['role'] === 'customer' | |
); | |
$views['customers_no_name'] = sprintf( | |
'<a href="%s"%s>%s <span class="count">(%d)</span></a>', | |
esc_url($url_customers), | |
$current_customers ? ' class="current"' : '', | |
esc_html__('Customers zonder naam', 'textdomain'), | |
$count_customers | |
); | |
// === Subscribers zonder naam === | |
$count_subs = (int) $wpdb->get_var( $wpdb->prepare(" | |
SELECT COUNT(DISTINCT u.ID) | |
FROM {$wpdb->users} u | |
INNER JOIN {$wpdb->usermeta} cap | |
ON cap.user_id = u.ID AND cap.meta_key = %s | |
LEFT JOIN {$wpdb->usermeta} fn | |
ON fn.user_id = u.ID AND fn.meta_key = 'first_name' | |
LEFT JOIN {$wpdb->usermeta} ln | |
ON ln.user_id = u.ID AND ln.meta_key = 'last_name' | |
WHERE cap.meta_value LIKE %s | |
AND (fn.meta_value IS NULL OR fn.meta_value = '') | |
AND (ln.meta_value IS NULL OR ln.meta_value = '') | |
", $cap_key, '%"subscriber"%') ); | |
$url_subs = add_query_arg( | |
['role' => 'subscriber', 'no_name' => '1'], | |
admin_url('users.php') | |
); | |
$current_subs = ( | |
isset($_GET['no_name']) && $_GET['no_name'] === '1' | |
&& isset($_GET['role']) && $_GET['role'] === 'subscriber' | |
); | |
$views['subscribers_no_name'] = sprintf( | |
'<a href="%s"%s>%s <span class="count">(%d)</span></a>', | |
esc_url($url_subs), | |
$current_subs ? ' class="current"' : '', | |
esc_html__('Subscribers zonder naam', 'textdomain'), | |
$count_subs | |
); | |
return $views; | |
}); | |
// 2) Query toepassen als de view actief is | |
add_action('pre_get_users', function ($query) { | |
if ( ! is_admin() ) return; | |
global $pagenow; | |
if ( 'users.php' !== $pagenow ) return; | |
if ( empty($_GET['no_name']) || $_GET['no_name'] !== '1' ) return; | |
if ( empty($_GET['role']) || ! in_array($_GET['role'], ['customer','subscriber'], true) ) return; | |
$query->set('role', sanitize_text_field($_GET['role'])); | |
$query->set('meta_query', [ | |
'relation' => 'AND', | |
[ | |
'relation' => 'OR', | |
['key' => 'first_name', 'compare' => 'NOT EXISTS'], | |
['key' => 'first_name', 'value' => '', 'compare' => '='], | |
], | |
[ | |
'relation' => 'OR', | |
['key' => 'last_name', 'compare' => 'NOT EXISTS'], | |
['key' => 'last_name', 'value' => '', 'compare' => '='], | |
], | |
]); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment