2012-06-17 29 views
21

私はWordPressのプラグインを開発しています。私はプレイヤーチームの2種類のカスタムポストタイプを使用しています。姓、名、およびチーム:関連するメタフィールドがありWordpress - メタフィールドの内容に基づいて投稿を取得

  • プレーヤー。
  • チームにはチーム名の関連メタフィールドがあります。

特定チームポストの編集中に、私は現在、チームの名がチーム名のために彼らのメタフィールドに投稿されたことを持っているすべての選手の配列を持つようにしようとしています。私はこれを行う方法がわかりません。どんなヘルプや記事も本当に役立ちます。ありがとう

答えて

22

重要なことは、ポストタイプ、メタキー、メタ値の少なくとも3つの基準を使用して投稿をクエリしていることです。例えば

、のは、カスタムポストタイプは、単に「プレーヤー」と呼ばれ、各「プレイヤーのポストは、あなたがこのようなものを使用して、それらの投稿を問い合わせることができ、「player_team」

と呼ばれる付属のメタフィールドを持っていると仮定してみましょう:

$teamname = ""; // the player's team that you're querying for 

$myquery = new WP_Query("post_type=player&meta_key=player_team&meta_value=$teamname&order=ASC"); 
+2

これはチームのページ内の二次のクエリであるので、代わりにquery_posts' 'の' WP_Query'または 'get_posts'を使用することをお勧めします - [コーデックス](HTTP参照://コーデックスを。 wordpress.org/Template_Tags/query_posts#Secondary_Loops) – Hobo

+3

これを反映するように更新されました –

+1

+1。いいね、ありがとう。ちなみに、私はこれまでに気づいていませんでした。おそらく、 'posts_per_page'パラメータ-1を追加することで、すべてのプレイヤーを元に戻すことができます(または、とにかく、質問者はその可能性を認識しています) 。 – Hobo

44

またはget_posts使用:

$args = array(
    'meta_key' => 'player_team', 
    'meta_value' => $teamname, 
    'post_type' => 'player', 
    'post_status' => 'any', 
    'posts_per_page' => -1 
); 
$posts = get_posts($args); 

別の同等のクエリがmeta_queryを使用しての代わりに、meta_keymeta_value

$args = array(
    'meta_query' => array(
     array(
      'key' => 'player_team', 
      'value' => $teamname 
     ) 
    ), 
    'post_type' => 'player', 
    'posts_per_page' => -1 
); 
$posts = get_posts($args); 
+7

''posts_per_page' => -1'を設定すると、一致するすべての投稿を検索します。' 999999'は必要ありません。 – cfx

+7

または 'nopaging => true'を設定します。 –

+1

@vortexs 'post_status'の提案に感謝します! – colllin

関連する問題