投稿メタデータによる投稿のフィルタリング


8

get_post_meta($post->ID, "project_cat", true)(投稿IDを返す)指定した値と等しい投稿のみが表示されるように投稿をフィルター処理したいのですが。

これを行う方法はありますか?

WP-Paginateプラグインと互換性のある方法に特に興味があります


56%はかなり低いです。以前の質問に戻り、正解を受け入れることを忘れないでください。「未回答」の山からそれらを取り除き、他の人がより簡単に解決策を見つけるのを助けます。また、OPが応答することを知っている場合、人々はより積極的に回答を提供します。:)
スティーブンハリス

以下の私の答えを参照してください。投稿をフィルタリングするタイミング/場所は明確ではありません。これを含めるように回答を更新した場合、チェックする必要がある「条件文」を提案できます。または、リンクされたquery_postの例を参照してください。一般的な原則は同じです- meta_query値を設定します。
スティーブンハリス

回答:


11

WP_Queryオブジェクトは、ポストメタ引数を受け入れます。一般的に言えば、次のことを実行する必要があります。

  $my_query = new WP_Query( 
    array(
      'post_type' => 'post',
      'meta_query' => array(
        array(
          'key' => 'project_cat',
          'value' => 'my-value',
        )
      ),

        // Other query properties
    ) 
  );

ここで、「my-value」は「指定された値」です。

使用例:

  add_action( 'pre_get_posts' , 'my_pre_get_posts' );

  function my_pre_get_posts( $query ) {

    // Check this is main query and other conditionals as needed
    if( $query->is_main_query() ) {
        $query->set( 
          'meta_query', 
          array( 
            array(
              'key' => 'project_cat',
              'value' => 'my-value'
            )
          )
        );
    }

  }

WP_Querypre_get_postsを参照してください。すべての条件文を使用できます。現在、これはすべてのメインクエリで実行されます-おそらく必要ありません。

またはquery_posts、(より単純ですが効率の悪い方法で)を使用して、テンプレート内の特定のインスタンスのみのクエリを変更することもできます。


@TahirYasin- コーデックスを参照してください。
スティーブンハリス

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.