繁体   English   中英

Category_slug类别儿童wordpress

[英]Category_slug of category children wordpress

我有一个“ Decouverte”女巫类别,它有三个子类别:“actualité”,“vidéo”和“ coup de coeur”。

当我按照帖子的子类别对帖子进行排序时,除“视频”类别外,其他所有内容都有效; category_slug显示“ decouverte”。

在我的仪表板上,我看到了: 我的帖子

子类别“视频”显示在最后,也许是为什么它不起作用?

我的代码:

        $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/它在右侧

问题来源

这是因为您对所有帖子都应用了两个类别。

每个帖子中的类别均按字母顺序排序。

在您的情况下,您将$category_slug = $categories[0]->slug; , 意思是:

从类别数组中获取第一个类别子弹名称

对于每个帖子,它是:

  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]对象是否为PARENT类别。 您可以通过检查以下内容来做到这一点:

$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"; }

当然,如果语句逻辑对您的数据进行更改。

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

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

如果您只需要获取任何帖子的子类别,应用于该帖子的任意数量的类别,并且无论父类别位于类别数组中的哪个位置,都应尝试此操作。

首先,将此函数添加到您的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 );

如果您有帖子ID,也可以在循环外部调用它

$subcategories = du_get_post_subcategories( $your_post_id );

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

如果您仅提供一个父类别的数组。 函数将返回一个空数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM