Answers:
只需WP_User_Query与搜索参数一起使用。
因此,如果您要搜索某个用户,例如该用户user_email在{$wpdb->prefix}users表的相似列或相似列中具有关键字,则可以执行以下操作:
$users = new WP_User_Query( array(
'search' => '*'.esc_attr( $your_search_string ).'*',
'search_columns' => array(
'user_login',
'user_nicename',
'user_email',
'user_url',
),
) );
$users_found = $users->get_results();
请记住,这*是一个通配符。因此,例如将限制为user_email单个域,则会为您提供以下搜索字符串:*@example.com。
该search字符串具有一些“魔术”功能:search_columns默认为...
user_email如果@在searcharg中存在。user_login而ID如果searcharg是数字user_url如果search字符串包含http://或https://user_login,user_nicename如果存在字符串。所有这些默认值仅在未 search_columns指定参数的情况下设置。
如果要通过first_name或进行搜索last_name,则必须做一个,meta_query因为它们不属于主表:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_string,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_string,
'compare' => 'LIKE'
)
)
) );
$users_found = $users->get_results();
确保检索正确的搜索字符串。通常是get_query_var('s');,但是可以-取决于您的表单name/id,也可以是其他一些不同的内容,$_GET['user_search']例如,您可能希望使用该内容。确保正确地保留它,并从字符串的开头和结尾除去不需要的空格。
请记住,这是array( array() )因为还有的relation关键。如果只想搜索一个键,则只需执行以下操作可能会更容易:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'meta_key' => 'first_name',
'meta_value' => $search_string,
'meta_compare' => 'LIKE',
) );
$users_found = $users->get_results();
结果可能类似于以下内容:
$search_string = esc_attr( trim( get_query_var('s') ) );
$users = new WP_User_Query( array(
'search' => "*{$search_string}*",
'search_columns' => array(
'user_login',
'user_nicename',
'user_email',
'user_url',
),
'meta_query' => array(
'relation' => 'OR',
array(
'key' => 'first_name',
'value' => $search_string,
'compare' => 'LIKE'
),
array(
'key' => 'last_name',
'value' => $search_string,
'compare' => 'LIKE'
)
)
) );
$users_found = $users->get_results();
functions.php您的模板,或者(最好)包装在自定义的迷你插件中,以免切换主题时失去功能。
display_name是中的列wp_users。我想到两个问题。1:这是对数据库架构的最近更改吗?2:是否可以将其用作值search_columns而不是元查询?
这帮助了我,而不是凯撒的答案:https : //laubsterboy.com/blog/2015/07/search-wordpress-users-by-name/
但是在此解决方案$wpdb->escape($usermeta_keys)函数中产生了错误,因此我简单地使用$usermeta_keys。