获取具有指定自定义分类的帖子的子代?

时间:2013-09-20 作者:indextwo

我有一个分层自定义帖子类型,名为Geographies, 其中,每个地理区域都被指定为自定义分类法(geographytype): 地区、国家、地区或城市。层次结构设置如下:

Area ¬
     Country ¬
             Region
             City
例如,波士顿市是美国的孩子,而美国又是美洲的孩子。

我希望能够获得某个地理位置的子女和/或孙子,并指定其geographytype - 例如,如果我正在查看Americas, 我想得到所有的城市,包括Boston.

然而,我似乎只能做其中一个。如果我使用get_pages(), 我可以通过指定parent 参数,但我无法指定geographytype, 所以我什么都买了。

相反,如果我使用WP_Query() 我可以指定我的geographytype 使用tax_query 参数,但它不会给我孙子;我只能使用post_parent 参数

我希望能够同时做到这两件事:使用指定的自定义分类法获取子代和孙子。

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

有趣的是,我通过使用get_pages()WP_Query(). 我想要一个可重用的函数,该函数将返回一个可循环使用的WP\\U查询数组,因此我提出了以下建议:

function returnChildGeographies($geoID, $geoType, $grandChildren = false) {

    $args = array(
        \'post_type\'         => \'geographies\',
        \'posts_per_page\'    => -1,
        \'orderby\'           => \'post_title\',
        \'order\'             => \'ASC\',
        \'post_parent\'       => $geoID,
        \'tax_query\'         => array(
            array(
            \'taxonomy\' => \'geographytype\',
            \'field\' => \'slug\',
            \'terms\' => $geoType
            )
        )
    );

    if ($grandChildren) {
        $getPagesArgs = array(
            \'sort_order\' => \'ASC\',
            \'sort_column\' => \'post_title\',
            \'hierarchical\' => 0,
            \'child_of\' => $geoID,
            \'post_type\' => \'geographies\'
        );

        $pagesArray = get_pages($getPagesArgs);
        $grandChildArray = array();

        foreach ($pagesArray as $grandchild) {
            $grandChildArray[] = $grandchild->ID;
        }

        unset($args[\'post_parent\']);
        $args[\'post__in\'] = $grandChildArray;
    }

    $childArray = new WP_Query($args);

    return $childArray;
}
例如用法:如果我正在查看美洲地区,并且我想获取该地区的所有城市(都是该地区的孙子),我会调用:

$regionQuery = returnChildGeographies($post->ID, \'city\', true);
如果我只想要直接的孩子:

$countryQuery = returnChildGeographies($post->ID, \'country\', false);
根据最后一个参数,函数将取消设置post_parent 和设置post__in, 这是我正在寻找的帖子ID数组。

这个函数可能会被整理很多,但方法是:组合get_pages()WP_Query() 似乎是获取孙子(或曾孙,或曾孙)和使用自定义分类查询的最佳方式。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post