Category_slug 类别儿童 wordpress

Category_slug of category children wordpress

我有一个类别 "Decouverte" 有三个子类别:"actualité"、"vidéo" 和 "coup de coeur"。

当我根据子类别对帖子进行排序时,除类别 "video" 之外的所有内容都有效; category_slug 显示 "decouverte".

在我的仪表板上,我看到了这个:

子类别 "Video" 最后显示,可能是它不起作用的原因?

我的代码:

        $categories = get_the_category(); 
        $category_slug = $categories[0]->slug;

        echo $category_slug;

       if ( $category_slug  == 'actualite' ) { ?>
          <div class="picto_home icone_actualite"></div><?php
        } 

        elseif ( $category_slug  == 'video' ) { ?>
          <div class="picto_home icone_video"></div><?php
        } 

        elseif ( $category_slug  == 'coupdecoeur' ) { ?>
          <div class="picto_home icone_coupdecoeur"></div><?php
        } 

        else { echo "Doesn't work"; } ?>

网站:http://www.overso.me/在正确的街区

问题来源

这是因为您已将两个类别应用于所有 post。

每个 post 中的类别按字母顺序排序。

在您的情况下,您选择 $category_slug = $categories[0]->slug;,这意味着:

Take first category slug name from categories array

每个 post 是:

  1. $categories[0] = Decouverte, $categories[1] = Video 因为 D < V
  2. $categories[0] = Actualite, $categories[1] = Decouverte 因为 A < D
  3. $categories[0] = Coup de coeur, $categories[1] = Decouverte 因为 C < D

如何让它随心所欲

好的,这是我解决您的问题的方法。

在检查 $categories[0]->slug 之前,让我们检查一下 $categories[0] 对象是父类别。您可以通过检查来做到这一点:

$categories = get_the_category();

// Remove parent category object from array if it's on first place
if($categories[0]->parent == 0){
    unset($categories[0]);
    $categories = array_values($categories);
}

如您所见,如果 $categories[0] 是父类别 (if($categories[0]->parent == 0)),则从数组 $categories - unset($categories[0]).

中删除此结果

现在您可以通过调用 $categories = array_values($categories).

将此数组的索引重置为从 0 开始

从现在开始,您可以轻松调用$categories[0]->slug,因为肯定没有第一位的父类别。

完整代码:

$categories = get_the_category();

// Remove parent category object from array if it's on first place
if($categories[0]->parent == 0){
    unset($categories[0]);
    $categories = array_values($categories);
}

$category_slug = $categories[0]->slug;

if ( $category_slug  == 'child-1' ) {
   echo "1111";
} 

elseif ( $category_slug  == 'child-2' ) {
   echo "2222";
} 

elseif ( $category_slug  == 'child-3' ) {
   echo "3333";
} 

else { echo "Doesn't work"; }

当然要更改数据的 if 语句逻辑。

更通用的解决方案以供将来参考

好的,这是我写的一些通用解决方案。

如果您只需要获取任何 post 的子类别,对于应用于 post 的任意数量的类别,无论父类别在类别数组中的哪个位置,您应该试试这个。

首先,将此函数添加到您的 functions.php 文件(或您的插件文件)。

function du_get_post_subcategories( $post_id ){
    $categories = get_the_category( $post_id );

    $i = 0;
    foreach ($categories as $category) {
        if($category->parent == 0){
            unset($categories[$i]);
        }
        $i++;
    }

    $categories = array_values($categories);
    return $categories;
}

然后在你的循环中你可以调用

$subcategories = du_get_post_subcategories( $post->ID );

如果你有post ID,你也可以在循环外调用它

$subcategories = du_get_post_subcategories( $your_post_id );

此函数将 return 所有子类别的格式与 get_the_category() 函数相同。

如果您提供的数组只有一个父类别。函数将 return 一个空数组。