Category_slug类别儿童wordpress

时间:2015-09-18 14:54:21

标签: php wordpress categories children

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

当我根据子类别对帖子进行排序时,除“视频”类别外,一切都有效; category_slug显示“decouverte”。

在我的信息中心上,我看到了这一点:my posts

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

我的代码:

        $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/它位于右侧块

1 个答案:

答案 0 :(得分:2)

问题来源

这是因为你有两个类别适用于所有帖子。

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

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

  

从类别数组中获取第一类slug名称

每篇文章都是:

  1. $categories[0] = Decouverte$categories[1] = Video因为D&lt; V
  2. $categories[0] = Actualite$categories[1] = Decouverte因为A&lt; D
  3. $categories[0] = Coup de coeur$categories[1] = Decouverte因为C&lt; D
  4. 如何使其按预期工作

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

    在检查$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])中移除此结果。

    现在,您可以通过调用0将此数组的索引重置为从$categories = array_values($categories)开始。

    从现在起,您可以轻松拨打$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语句对数据的逻辑。

    更具体的解决方案供将来参考

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

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

    首先,将此函数添加到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()函数相同的格式返回所有子类别。

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