我认为您有两个问题可以一次性解决:
\'search\' => \'*\' . esc_attr( $search_term ) . \'*\',
<你不需要
\'*\'
学期结束了。看起来您正在尝试使用通配符,但这正是搜索通过在术语周围添加SQL“%”所做的。本质上,您最终会搜索
"%*{$search_term}*%"
, 这可能不是你想要的
esc_attr
这里应该没有必要。查询中使用的WordPress数据库类将为您转义输入使用search
在这种情况下,创建这样的查询:SELECT ... FROM wp_users JOIN wp_usermeta ... WHERE (
(
meta_key = \'nickname\' AND meta_value LIKE \'search term\'
) OR
(
meta_key LIKE \'last_name\'
...
)
AND
(
wp_users.ID LIKE \'search term\'
OR
wp_users.user_login LIKE \'search term\'
)
) -- END WHERE
这也可能不是你想要的。在a中
WP_User_Query
,
search
表示“搜索与此查询匹配的用户登录”,而不是“搜索与此查询匹配的一般用户元”
那么,试试这样:
// wp_user_query arguments
$args = array (
\'role\' => \'customer\',
\'order\' => \'asc\',
\'orderby\' => \'display_name\',
\'meta_query\' => array(
\'relation\' => \'or\',
array(
\'key\' => \'nickname\',
\'value\' => $search_term,
\'compare\' => \'like\'
),
array(
\'key\' => \'last_name\',
\'value\' => $search_term,
\'compare\' => \'like\'
),
array(
\'key\' => \'billing_phone\',
\'value\' => $search_term,
\'compare\' => \'like\'
)
)
);