2017-10-28 19 views
3

私は、関連ユーザーであるカスタム投稿タイプinstitutionsを持っています。WordPressでカスタム投稿タイプに関連付けられたすべてのユーザーを取得します。

新しいユーザーを追加するたびに、Advanced Custom Fieldsプラグインを使用して、関連する機関を選択することができます。

今すぐセットアップが完了していることを、私は現在、それは私が取得することができませんので、私はWP_Query()を使用することはできません(single-institutions.php

を表示しています機関に関連付けられているすべてのユーザのリストを表示しようとしていますユーザーと私はwp_list_authors()を使用できません。なぜなら、それはmeta_queryを許可しないからです。

私は旧式のmysqlクエリを使用して残っています。

しかし、私は適切な結果を得るために複数のテーブルを照会する必要があるため、どのように進めるべきかわかりません。

wp_users: ID 
wp_usermeta 
    user_id 
    meta_key: institution 
    meta_value: a:1:{i:0;s:4:"2875";} // "2875" is the ID of the institution the user is associated with 

これを直接mysqlクエリで実現するにはどうすればよいですか?

EDIT:代わりにWP_User_Query()に切り替えましたが、私はそれが存在するのかどうかはわかりませんでした。しかし、私は何を入れるべきか分かりません。meta_value

$args = array(
    'role'   => 'Author', 
    'order'   => 'ASC', 
    'orderby'  => 'display_name', 
    'who'   => 'authors', 
    'exclude'  => [1, 7], 
    'count_total' => true, 
    'meta_key'  => 'institution', 
    'meta_value'  => $post->ID 
); 

// The User Query 
$user_query = new WP_User_Query($args); 

// The User Loop 
if (! empty($user_query->results)) { 
    foreach ($user_query->results as $user) { 
    echo $user->display_name . '<br>'; 
    } 
} else { 
    // no users found 
} 

今は何も表示されません。クエリから「meta_value」を削除すると、どの機関にも関連するすべてのユーザーがすべてのページに表示されます。

現在表示中の施設ID($post->ID)に一致するように絞り込むにはどうすればよいですか?

meta_valueの値はwp_usermetaのテーブルの値です。それは連載されています。最後にIDを取得するために何か特別な処理を行う必要がありますか?

a:1:{i:0;s:4:"2875";} 

答えて

2

あなたはWP_Queryに似てWP_User_Queryを使用する必要があります。具体的には、あなたの場合、Custom Field Parametersを見て、施設のIDを送ってください。

+0

ありがとう、本当に役に立ちました。 'WP_User_Query()'が存在しないということはありませんでした。しかし、私は 'meta_value'のために何を使用するのか不明です - 私は私の投稿を更新しました。 – Halnex

+0

それは働いた。私は 'meta_compare'に' = 'の代わりに' LIKE'を使わなければなりませんでした。ありがとうございました。 – Halnex

+1

@Halnexああ、正しい、私はこれがシリアル化された配列であるという事実を忘れてしまった。 1)多くのデータを持ち、サイトのパフォーマンスに影響を与える可能性がある場合、LIKE演算子を使用してメタクエリを実行するとコストが高くなる可能性があります。通常は問題ありませんが、問題が発生した場合は、これを確認する必要があります。 2) 'meta_value' => '"' $ post-> ID '' ''のように、あなたの' meta_value'に二重引用符を含める必要があります。このようにすると、 '' 9 "'などを選択するときに '' 19 ''のような値を選択することは避けられます。 –

関連する問題