按帖子元数据过滤帖子


8

我想以仅显示get_post_meta($post->ID, "project_cat", true)(返回帖子ID)等于我指定值的帖子的方式过滤帖子。

有什么办法吗?

我对使其与WP-Paginate插件兼容的方式特别感兴趣。


56%的比例非常低-请记住要返回到您以前的问题并接受正确的答案。这使他们摆脱了“无人解决”的困境,并帮助其他人更轻松地找到解决方案。如果人们知道OP将响应他们,他们也将更愿意提供答案。:)
Stephen Harris

请参阅下面的答案。您不清楚何时/何地要过滤帖子。如果您更新答案以包括此内容,我可以建议您需要检查哪些“条件”。或者,请参见链接的query_post示例。一般原则是相同的-设置meta_query值。
史蒂芬·哈里斯

Answers:


11

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
    ) 
  );

其中“我的价值”是您的“指定价值”。

用法示例:

  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-参见法典
史蒂芬·哈里斯

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.