PHP / Wordpress - 在无序列表中将属性添加到当前类别

时间:2013-10-22 02:02:18

标签: php wordpress foreach categories woocommerce

我正在使用WooCommerce购物车插件,并为默认的WooCommerce模板编写了我自己的主题文件覆盖,以便进行更多控制。所以我从头创建了一个侧边栏,列出了所有产品类别。效果很好:

<ul class="sidebar-list">
    <?php 
        $all_categories = get_categories( 'taxonomy=product_cat&hide_empty=0&hierarchical=1' );

        foreach ($all_categories as $cat) {
            echo '<li><a href="'. get_term_link($cat->slug, 'product_cat') .'"><span>'. $cat->name .'</span></a>';
        }
    ?>
</ul>

但是,上面的foreach循环不会输出任何类型的“当前类别”属性(就像列表项上的类一样)。所以我试图编写一些PHP来抓取当前的产品类别,并将它在foreach循环中与正在显示的类别进行比较,如果匹配,则在列表项中添加“当前”类。

<ul class="sidebar-list">
    <?php 
        $all_categories = get_categories( 'taxonomy=product_cat&hide_empty=0&hierarchical=1' );

        $terms = get_the_terms( $post->ID, 'product_cat' );

        foreach ($terms as $term) {
            $product_cat = $term->term_id;
            break;
        }

        foreach ($all_categories as $cat) {
            echo '<li class="';

            if ( $product_cat == $cat->id ) {
                echo "current";
            }   

            echo '"><a href="'. get_term_link($cat->slug, 'product_cat') .'"><span>'. $cat->name .'</span></a>';
        }
    ?>
</ul>

正如你可能从我这里发布的那样,它不起作用。

我知道我有一个问题,因为我甚至无法抓住$cat->id,因为如果我自己回应它,我什么也得不到。似乎我有权访问的是$cat->name$cat->slug

最重要的是,我确信我的逻辑也是有缺陷的。有人能让我朝着正确的方向前进吗?

谢谢,谢谢,谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用wp_list_categories

仅在归档/类别页面上将CSS类current-cat添加到活动类别:

<?php
    $args = array(
        'taxonomy' => 'product_cat',
        'hide_empty' => 0,
        'hierarchical' => 1
    );
    wp_list_categories($args);
?>

current-cat返回结果的所有网页上的活动类别中添加CSS类get_the_category()

<?php
    $category = get_the_category();
    $current_category_ID = isset($category->cat_ID) ? $category->cat_ID : 0;
    $args = array(
        'taxonomy' => 'product_cat',
        'hide_empty' => 0,
        'hierarchical' => 1,
        'current_category' => $current_category_ID
    );
    wp_list_categories($args);
?>