pre_user_query
云策文档标注
概述
pre_user_query 是一个 WordPress 动作钩子,在 WP_User_Query 解析后、执行前触发,允许开发者修改查询参数或 SQL 语句。
关键要点
- 触发时机:在 WP_User_Query 解析完成之后,查询执行之前
- 参数:传递一个 WP_User_Query 对象(引用传递),包含已解析的 SQL 部分
- 用途:常用于自定义用户查询逻辑,如修改搜索条件或添加元数据过滤
- 版本:自 WordPress 3.1.0 引入
代码示例
add_action('pre_user_query', function($uqi) {
global $wpdb;
$search = '';
if (isset($uqi->query_vars['search']) && !empty($uqi->query_vars['search']))
$search = trim($uqi->query_vars['search']);
if ($search) {
$search = trim($search, '*');
$the_search = '%'.$search.'%';
$search_meta = $wpdb->prepare("
ID IN ( SELECT user_id FROM {$wpdb->usermeta}
WHERE ( ( meta_key='first_name' OR meta_key='last_name' )
AND {$wpdb->usermeta}.meta_value LIKE '%s' )
)", $the_search);
$uqi->query_where = str_replace(
'WHERE 1=1 AND (',
"WHERE 1=1 AND (" . $search_meta . " OR ",
$uqi->query_where );
}
});注意事项
- 参数 $query 是 WP_User_Query 实例,通过引用传递,可直接修改其属性(如 query_where)
- 相关函数:WP_User_Query::prepare_query() 用于准备查询变量
- 用户贡献笔记中提供了扩展搜索到用户元数据(如 first_name、last_name)的示例代码
原文内容
Fires after the WP_User_Query has been parsed, and before the query is executed.
Description
The passed WP_User_Query object contains SQL parts formed from parsing the given query.
Parameters
$queryWP_User_Query-
Current instance of WP_User_Query (passed by reference).
Source
do_action_ref_array( 'pre_user_query', array( &$this ) );
Changelog
| Version | Description |
|---|---|
| 3.1.0 | Introduced. |
Skip to note 2 content
tikot
Find user by usermeta add change the meta key or add more meta keys
OR meta_key='key_name'between () on WHERE linequery_vars['search'] ) ) $search = trim( $uqi->query_vars['search'] ); if ( $search ) { $search = trim($search, '*'); $the_search = '%'.$search.'%'; $search_meta = $wpdb->prepare(" ID IN ( SELECT user_id FROM {$wpdb->usermeta} WHERE ( ( meta_key='first_name' OR meta_key='last_name' ) AND {$wpdb->usermeta}.meta_value LIKE '%s' ) )", $the_search); $uqi->query_where = str_replace( 'WHERE 1=1 AND (', "WHERE 1=1 AND (" . $search_meta . " OR ", $uqi->query_where ); } });