最初はget_users()
を使うと思いましたが、display_nameフィールドはサポートしていませんでした。それから私はWP_User_Queryを使用することについて読みました、しかし、私がそれをするとき、それは常に134217728バイトの許容されたメモリサイズを使い果たします。メモリ制限を解除すると、ページのこの部分はロードされません。今、私は再びget_users()
を使えるように、全員のdisplay_nameをユーザーのメタに追加する関数を実行することを考えています。それは良い考えですか?
私の目的は検索も関連性でソートすることです。そして、explode(' ', $search_query)
を使用して配列の各要素に対してget_users()
を呼び出し、それから結果を次のように組み合わせてソートします。 https: //stackoverflow.com/questions/2176626/php-get-element-with-5-highest-occurrence-in-an-array そしてそれがメモリ効率の良いものになるかどうかはよくわかりません。
読んでくれてありがとう。
私はあなたがこの仕事のためにデフォルトのクラスを使うべきだと思います - WP_User_Query
。クエリには多くの可能性があり、表示名も取得します。 WP_User_Queryは、WordPressデータベーステーブルの_users
と_usermeta
を照会することを可能にするクラスです。
値にキャッシュを使用するときにも役立ちます。また、WordPressのデフォルトのWP_Cache
(Non-Persistent Cache)または一時的なAPI(Database-Driven Temporarily Persistent Cache)をお勧めします。
以下の例はWP_Cacheを使ってこれを実演します、あなたはトランジェントでこれをすることもできます。コードは機能しません、説明するためにスクラッチで書くだけです。
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;
}
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
バイトは、ユーザーとトラフィックが多い場合はかなりスリムです。あなただけのサーバーのアップグレードが必要な場合があります。