查询类别中两种帖子格式的帖子

时间:2014-10-12 23:58:48

标签: php wordpress wp-query

我一直在阅读WP_Query Codex寻找一种方法来浏览所有包含帖子格式的帖子'视频'在给定类别中,或者'图像'

如果这还不够,这个类别由变量$catslug给出(我需要这样做)。

我只找到循环通过以下其中一种

的方法
  • 图片或视频

  • 图片和类别

  • 视频和类别,

但我需要的更复杂,如下:

post-format-image$catslug)或(post-format-video$catslug

是否可以在tax_query内执行tax_query

这样的事情:

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
        'relation' => 'OR',
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms'    => array($catslug)
            ),
            array(
                'taxonomy' => 'post_format',
                'field'    => 'slug',
                'terms'    => array( 'post-format-image' )
            )
        ),
        'tax_query' => array(
            'relation' => 'AND',
            array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms'    => array($catslug)
            ),
            array(
                'taxonomy' => 'post_format',
                'field'    => 'slug',
                'terms'    => array( 'post-format-video' )
            )
        )
    ) 
); 
$query = new WP_Query( $args );

任何人都知道任何解决方法或黑客来获得这个? 也许我只是想错了路。

1 个答案:

答案 0 :(得分:1)

这实际上是一个很好的问题。这里的简单答案是你不能使用多个tax_query

这让我在上班前快速测试了以下场景。只是为了好玩,我去尝试使用tax_query的类别参数,但这给了我所需类别的帖子和也属于两种帖子格式的帖子

我想出了一个可能的解决方案,遗憾的是我现在无法对此进行测试。

这是我在这里的路线:

由于您需要随机结果,我建议您将帖子格式添加到数组中

$post_format_array = array( 'post-format-video', 'post-format-image' );

您现在将使用shuffle来重新排列数组,然后从该数组中获取第一个条目,该条目将是图像视频,并在tax_query中使用该条目。

shuffle( $post_format_array );    

通过这种方式,您可以获得所需类别以及视频或图片发布格式的帖子。

$args = array(
    'post_type' => 'post',
    'tax_query' => array(
    'relation' => 'AND',
      array(
        'taxonomy' => 'category',
        'field'    => 'slug',
        'terms'    => $catslug,
      ),
      array(
        'taxonomy' => 'post_format',
        'field'    => 'slug',
        'terms'    => $post_format_array[0]
      ),
    ),
);
$query = new WP_Query( $args );