按显示名称搜索用户的最有效方式是什么?

时间:2015-05-20 作者:Nadroev

起初我想我会用get_users() 但事实证明它不支持display\\u name字段。然后我读到了关于使用WP\\u User\\u查询的内容,但当我这样做时,它总是会耗尽允许的内存大小134217728字节。当我删除内存限制时,页面的这部分甚至不会尝试加载。现在我正在考虑运行一个函数,将每个人的display\\u名称添加到他们的用户元中,以便我可以使用get_users() 再一次这是个好主意吗?

我的目标是让搜索也按相关性排序,我计划使用explode(\' \', $search_query) 然后打电话get_users() 对于数组中的每个元素,然后按发生次数对结果进行组合和排序,如下所示:https://stackoverflow.com/questions/2176626/php-get-element-with-5-highest-occurrence-in-an-array 我不确定这是否会节省内存。

感谢阅读。

2 个回复
SO网友:bueltge

我认为您应该使用默认类来完成此工作-WP_User_Query.查询有很多可能性,也可以得到显示名称。WP_User_Query是一个允许查询WordPress数据库表的类_users_usermeta.

当您对值使用缓存时,它也很有用。此外,我更喜欢WordPress的默认设置WP_Cache (非持久缓存)或瞬态API(数据库驱动的临时持久缓存)。

下面的示例将用WP\\U缓存演示这一点,您也可以用瞬态来实现这一点。这段代码不会工作,只不过是从头开始写来说明。

function wpse_get_user_data( $args ) {


    if ( ! $user_query = wp_cache_get( $args->ID, \'your_key\' ) ) {
        $user_query = array();
        $user_query = new WP_User_Query( $args );

        wp_cache_add( $args-ID, $user_query, \'your_key\' );
    }

    return $user_query;
}

SO网友:s_ha_dum

如果你通过“搜索”WP_User_query 您将搜索user_login 字段和user_nicename 字段。这会导致事实上的低效OR 查询您可以通过使用过滤器强制搜索user_nicename 领域

add_filter(\'user_search_columns\',\'nicename_only_wpse_188846\');

function nicename_only_wpse_188846($search_columns) {
  return array(\'user_nicename\');
}

$args = array(
  \'search\' => \'abce\',
);

// The Query
$user_query = new WP_User_Query( $args );
var_dump($user_query);
将其与缓存相结合,您可能会有机会。

也就是说,134217728 如果你有大量的用户和流量,字节数就相当少了。您可能只需要升级服务器。

结束