web-dev-qa-db-ja.com

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

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

これを行う方法は?

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

8
porton

WP_Queryオブジェクトはpost meta引数を受け入れます。一般的に言って、あなたは次のことをしたいです。

  $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 (もっと単純ではあるがはるかに効率的でない方法)を使用することができます。

10
Stephen Harris

あなたはメタ値に基づいて投稿をフィルタリングし、cmsページに投稿を表示することができます。

'meta_query' => array(
        array(
            'key'     => 'front_page',
            'value'   => 'yes',
            'compare' => 'LIKE',
        ))

ステップバイステップの説明についてはチュートリアルを参照してください

http://www.pearlbells.co.uk/filter-posts-custom-fields-wp_query/ /

1
Liz Eipe C