如何在WP_USER_QUERY中使用SEARCH_COLUMNS?

时间:2012-10-17 作者:Ajay Patel

我正在使用WP_User_Query 要按姓名、ID、电子邮件等搜索使用。。。那样的话,我需要使用search_columns 传递用户ID或电子邮件的字段。

我正在做的是

$my_users = new WP_User_Query( 
                    array( 
                        \'role\' => $role,
                        \'offset\' => $offset ,
                        \'number\' => $number,
                        \'fields\' => \'all\',
                        \'search_columns\'=> array( \'5\',\'\', \'[email protected]\',\'\',\'\'),
                        //\'search_columns\'=> $search_columns_array,
                        \'meta_query\' => $meta_query_array,
                    ));
供参考http://wpsmith.net/2012/wp/an-introduction-to-wp_user_query-class/

1 个回复
最合适的回答,由SO网友:Stephen Harris 整理而成

这在您引用的链接中有介绍:search_columns 属性不设置应在每个列中搜索的内容,而是指定应在“搜索”中搜索术语集的列。

具体来说,您只能搜索一个术语,但可以在一列或多列中查找。

//Search user logins & emails for \'foo\'.
$my_users = new WP_User_Query( 
              array( 
                \'fields\' => \'all\',
                \'search\'=>\'foo\',
                \'search_columns\'=> array(\'user_login\', \'user_email\'),
            ));
source, 默认值为:

  • user_email - 如果搜索词中存在“@”user_login, ID - 如果不是,但术语是数字user_url - 如果没有,则该术语看起来像一个url(并且您的用户少于10000)
  • 如果无法满足上述任何条件,则默认为搜索user_loginuser_nicename

    $search_columns = array();
    if ( $qv[\'search_columns\'] )
        $search_columns = array_intersect( $qv[\'search_columns\'], array( \'ID\', \'user_login\', \'user_email\', \'user_url\', \'user_nicename\' ) );
    if ( ! $search_columns ) {
        if ( false !== strpos( $search, \'@\') )
            $search_columns = array(\'user_email\');
        elseif ( is_numeric($search) )
            $search_columns = array(\'user_login\', \'ID\');
        elseif ( preg_match(\'|^https?://|\', $search) && ! wp_is_large_network( \'users\' ) )
            $search_columns = array(\'user_url\');
        else
            $search_columns = array(\'user_login\', \'user_nicename\');
    }
    

结束