是否在父类别、按子类别分组中选择全部?

时间:2015-03-25 作者:tdc

我正在尝试为“系列”设置自定义帖子类型的格式。每一篇文章都是一集,每一集都属于一季,每一季都属于一个系列(就像电视节目一样)。

I have the following:

<自定义帖子类型:“剧集”自定义分类:“系列”内部系列、“Real Deal”类别内部的父类别,几个子类别(即“第1季”、“第2季”)

一幅图像能说出千言万语,下面是我的意思的一个快速模型:

enter image description here

WHAT I\'VE TRIED

这是我目前拥有的代码,但是我不认为我在正确的轨道上完成了上面的说明。这将为我获取第1季的所有剧集,但是我需要获取每个季节的所有剧集,然后将每个季节分组到它自己的HTML容器中。

<?php
  $args = [
      \'post-type\'   => \'episode\',
      \'post-status\' => \'publish\',
      \'tax_query\'   => [
          [
              \'taxonomy\' => \'series\',
              \'field\'    => \'slug\',
              \'terms\'    => \'season-1\'
          ]
      ]
  ];
  $episodes = new WP_Query($args);
  if ( $episodes->have_posts() ) {
    while( $episodes->have_posts() ) {
        $episodes->the_post();
        get_template_part(\'content\',\'episodes\');
    }
  } else {
    get_template_part(\'content\', \'none\');
  }
?>
QUESTION

如何将查询结构为A)选择所有剧集,按剧集分组,然后按季节显示?

EDIT:

最后,我使用了迈克尔·埃克隆德(MichaelEcklund)提供的第三个代码片段,它成功地完成了我所要寻找的内容——抓取了每个季度的4篇最新帖子,并将它们存储到一个数组中。谢谢你的帮助!

1 个回复
最合适的回答,由SO网友:Michael Ecklund 整理而成

这里有一个简单的解决方案。但要求您拥有最新版本的WordPress。(或至少4.1)

使用嵌套分类查询。

拿走你所有的,再加上一点。

$args = array(
    \'post-type\'      => \'episode\',
    \'post-status\'    => \'publish\',
    \'posts_per_page\' => 4,
    \'tax_query\'      => array(
        \'relation\' => \'AND\',
        array(
            \'taxonomy\' => \'series\',
            \'field\'    => \'slug\',
            \'terms\'    => array( \'real-deal\' ),// Name of the series (in slug format)
        ),
        array(
            \'taxonomy\' => \'series\',
            \'field\'    => \'slug\',
            \'terms\'    => array( \'season-1\' ),// Name of the season (in slug format)
        )
    )
);

$episodes = new WP_Query( $args );

print_r( $episodes->posts );
也就是说,找到属于特定系列且包含特定季节的4个最新发布的剧集。(这就是你的视觉模型所描绘的)

你提到需要“季节”是动态的。

以下是如何从父类别(系列)中获取所有“子类别”(季节),然后从该系列以及所有可能的季节中检索最新的4集。

$taxonomy = \'series\';

$seasons = get_terms( $taxonomy, array(
    \'parent\' => 1, // TERM ID OF THE SERIES
    \'fields\' => \'id=>slug\'
) );

if ( ! empty( $seasons ) && ! is_wp_error( $seasons ) ) {

    $args = array(
        \'post-type\'      => \'episode\',
        \'post-status\'    => \'publish\',
        \'posts_per_page\' => 4,
        \'tax_query\'      => array(
            \'relation\' => \'AND\',
            array(
                \'taxonomy\' => $taxonomy,
                \'field\'    => \'slug\',
                \'terms\'    => array( \'industry-news\' ),// Name of the "series" (in slug format)
            ),
            array(
                \'taxonomy\' => $taxonomy,
                \'field\'    => \'slug\',
                \'terms\'    => array_values( $seasons ),// Name of the "seasons" (in slug format) DYNAMIC
            )
        )
    );

    $episodes = new WP_Query( $args );

    print_r( $episodes->posts );

}
假设你在一个系列中有三季。。。您希望显示本系列中每个季度的4个最新剧集。

$taxonomy = \'series\';

$seasons = get_terms( $taxonomy, array(
    \'parent\' => 1, // TERM ID OF THE SERIES
    \'fields\' => \'id=>slug\'
) );

$season_episodes = array();

if ( ! empty( $seasons ) && ! is_wp_error( $seasons ) ) {

    foreach ( array_values( $seasons ) as $season ) {

        $season_episodes[ $season ] = array();// Placeholder in-case there\'s no episodes found.

        $args = array(
            \'post-type\'      => \'episode\',
            \'post-status\'    => \'publish\',
            \'posts_per_page\' => 4,
            \'tax_query\'      => array(
                \'relation\' => \'AND\',
                array(
                    \'taxonomy\' => $taxonomy,
                    \'field\'    => \'slug\',
                    \'terms\'    => array( \'industry-news\' ),// Name of the "series" (in slug format)
                ),
                array(
                    \'taxonomy\' => $taxonomy,
                    \'field\'    => \'slug\',
                    \'terms\'    => array( $season ),// Name of the "seasons" (in slug format) DYNAMIC
                )
            )
        );

        $episodes = new WP_Query( $args );

        if ( ! empty( $episodes->posts ) ) {
            $season_episodes[ $season ] = $episodes->posts;// Add all episodes found in this season.
        }

    }

}

if ( ! empty( $season_episodes ) ) {
    print_r( $season_episodes );
}
最后一种方法是将一个系列中最新的4集按季节分类,将这4篇帖子放入单独的数组中。

综上所述,在包含4个最近剧集的系列中,每个季度都有一个数组。你所要做的就是输出信息。

结束

相关推荐

Re-order posts in query after

对于特定类别,我需要合并到另一个自定义帖子类型中。现在,我想基于自定义字段进行查询。这可能吗?下面是我合并查询的方式。if (in_category( \'Events\' ) && is_archive()) { global $wp_query; $args = array ( \'post_type\' => \'custom_post_type\' ); $second_query = n