【问题标题】:Category_slug of category children wordpress类别儿童wordpress的category_slug
【发布时间】:2015-09-18 14:54:20
【问题描述】:

我有一个类别“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/ 就在右边

【问题讨论】:

    标签: php wordpress categories children


    【解决方案1】:

    问题根源

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

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

    在您的情况下,您使用$category_slug = $categories[0]-&gt;slug;,这意味着:

    从类别数组中获取第一个类别 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]-&gt;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]-&gt;parent == 0)),然后从数组 $categories - unset($categories[0]) 中删除此结果。

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

    从现在开始,您可以轻松地拨打$categories[0]-&gt;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() 函数格式相同的所有子类别。

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

    【讨论】:

    • 我明白了,但是如何自动定位子类别?
    • 已编辑答案,希望对您有所帮助
    • 非常感谢您的帮助;你可能是对的,但我不知道如何使用$child_categories 进行过滤:/ 仍在努力
    • 给我几分钟,我会为你准备一些代码。
    • 非常感谢!!你花了时间,一点一点告诉我;你真好。它有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-06
    • 2012-01-13
    • 2020-03-06
    • 2013-12-03
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多