Get Child Category only

时间:2020-12-16 作者:JoaMika

我正在使用此代码检索类别:

$post_id = get_the_ID();
  $countries = get_the_terms( $post_id, \'country\' );
  $fcountry = $countries[0]->slug;
然而,这有时会检索国家的父类别(在我们的场景中是大陆)。我怎样才能始终输出子类别(即国家)?

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

如果我理解正确,这里的问题是get_the_terms(..) 返回父类别和子类别。正如您在评论中所说,其中只有一个家长和一个孩子,我们可以使用这些信息来获得正确的术语。

基本上我们需要过滤结果,我们知道parent 当另一个有时,不要设置,所以只需设置后一个。

function joamika_get_country_from_post(int $postId): ?string {
    $countries = get_the_terms($postId, \'country\');
    if (!is_array($countries)) {
        return null;
    }
    array_filter($countries, function(\\WP_Term $term): bool {
        return $term->parent !== 0;
    });
    if (empty($countries)) {
        return null;
    }
    return $countries[0]->slug;
}

$fcountry = joamika_get_country_from_post($post_id);
if ($fcountry === null) {
    // something went wrong
}

// continue with your logic
如果这是你第一次看到foo(int $postId): ?string {, 别担心。您可以删除或保留它们。我希望我的PHP代码尽可能严格地类型化-您可以read more about the topic here.

你仍然需要考虑在找不到国家的情况下处理此案。

相关推荐

Taxonomy rewrite question

我有定制的餐饮、住宿和活动职位类型。这些自定义帖子类型中的每一种都使用一种称为region的自定义分类法。例如,如果我有一个名为“闹市区”的地区,我希望能够通过转到域来显示该地区的用餐选项。com/市中心/餐饮。或者通过进入域名展示该地区的酒店。通讯/市中心/住宿。所以,基本上,我喜欢创建一个重写规则来给出结构域。com/tax term/cpt slug显示已选择该税项的cpt的所有帖子。有什么办法吗?