我正在尝试在管理屏幕中的用户中显示 ACF 字段,并且我能够实现这一点。现在我想在正常的 WordPress 用户搜索中通过这个 ACF 字段搜索用户。是否有任何挂钩/代码片段可以实现此目的?
在用户列表中显示 ACF 字段的代码:
function column_register_acf_id($columns)
{
$columns['memno'] = 'Memno';
return $columns;
}
add_filter('manage_users_columns', 'column_register_acf_id');
function column_display_acf_id($value, $column_name, $user_id)
{
$user_info = get_field('memno', 'user_' . $user_id);
if ($column_name == 'memno')
return $user_info;
return $value;
}
add_filter('manage_users_custom_column', 'column_display_acf_id', 10, 3);
Acf 字段用户列表:https://prnt.sc/N-xmnIF-YEzP
以下是如何使用它在用户搜索中包含自定义字段值的示例:
// Replace 'user_number' with the actual name of your ACF field
function custom_search_by_acf_field($user_query) {
if (is_admin() && $user_query->is_search) {
global $wpdb;
$user_search = $user_query->query_vars['search'];
$meta_query = array(
'relation' => 'OR',
array(
'key' => 'user_number', // Replace with the actual name of your ACF field
'value' => $user_search,
'compare' => 'LIKE',
),
);
$meta_query = new WP_Meta_Query($meta_query);
$clauses = $meta_query->get_sql('user', $wpdb->users, 'ID', $user_query);
$join = $clauses['join'];
$where = $clauses['where'];
$user_query->query_from .= $join;
$user_query->query_where .= $where;
}
}
add_action('pre_user_query', 'custom_search_by_acf_field');
此代码片段检查当前页面是否是用户管理屏幕以及是否存在搜索查询。如果两个条件都满足,它会向用户查询添加元查询以搜索指定的 ACF 字段。
确保将“user_number”替换为代码中 ACF 字段的实际名称。
将此代码放入主题的functions.php 文件或自定义插件中。添加代码后,您应该能够通过 ACF 字段在 WordPress 管理员中搜索用户。