【问题标题】:Get WooCommerce product categories from WordPress从 WordPress 获取 WooCommerce 产品类别
【发布时间】:2014-01-27 08:55:39
【问题描述】:

我正在尝试通过我的 WordPress 主题中的功能从 WooCommerce 获取产品类别

    function get_me_list_of($atts, $content = null)
    {   
        $args = array( 'post_type' => 'product', 'posts_per_page' => 10, 'product_cat' => $atts[0]);

        $loop = new WP_Query( $args );

        echo '<h1 class="upp">Style '.$atts[0].'</h1>';
        echo "<ul class='mylisting'>";
        while ( $loop->have_posts() ) : $loop->the_post(); 
        global $product; 

        echo '<li><a href="'.get_permalink().'">'.get_the_post_thumbnail($loop->post->ID, 'thumbnail').'</a></li>';
     echo '<li><a href="'.get_permalink().'">'.$loop->post->post_title.'</a></li>';

echo '<li><a href="">'.get_categories().'</a></li>';
        endwhile; 

        echo "</ul>";

        wp_reset_query(); 


    }

    ?>

上面的代码返回了一些产品,但是产品类别。

当我在上面的代码中包含echo '&lt;li&gt;&lt;a href=""&gt;'.get_categories().'&lt;/a&gt;&lt;/li&gt;'; 时,它会以数组的形式返回。我该如何解决这个问题?

如何更改此设置以从 WooCommerce 获取产品类别?

【问题讨论】:

  • print_r(array); ,看看会发生什么 --> 使用相关数据

标签: php wordpress woocommerce


【解决方案1】:
<?php

  $taxonomy     = 'product_cat';
  $orderby      = 'name';  
  $show_count   = 0;      // 1 for yes, 0 for no
  $pad_counts   = 0;      // 1 for yes, 0 for no
  $hierarchical = 1;      // 1 for yes, 0 for no  
  $title        = '';  
  $empty        = 0;

  $args = array(
         'taxonomy'     => $taxonomy,
         'orderby'      => $orderby,
         'show_count'   => $show_count,
         'pad_counts'   => $pad_counts,
         'hierarchical' => $hierarchical,
         'title_li'     => $title,
         'hide_empty'   => $empty
  );
 $all_categories = get_categories( $args );
 foreach ($all_categories as $cat) {
    if($cat->category_parent == 0) {
        $category_id = $cat->term_id;       
        echo '<br /><a href="'. get_term_link($cat->slug, 'product_cat') .'">'. $cat->name .'</a>';

        $args2 = array(
                'taxonomy'     => $taxonomy,
                'child_of'     => 0,
                'parent'       => $category_id,
                'orderby'      => $orderby,
                'show_count'   => $show_count,
                'pad_counts'   => $pad_counts,
                'hierarchical' => $hierarchical,
                'title_li'     => $title,
                'hide_empty'   => $empty
        );
        $sub_cats = get_categories( $args2 );
        if($sub_cats) {
            foreach($sub_cats as $sub_category) {
                echo  $sub_category->name ;
            }   
        }
    }       
}
?>

这将按层次列出所有顶级类别和它们下的子类别。如果您只想显示顶级类别,请不要使用内部查询。随心所欲。

【讨论】:

  • 效果很好。谢谢。
  • @Suman.hassan95 :grt 亲爱的它的工作,但一个问题是我们也可以提供子类别的链接吗??
  • @Tester: woocommerce 中是否有类似子类别的子类别??
  • 有什么办法可以避开第一大类吗?喜欢在第一个循环中使用 child_of 吗?当我尝试这样做时......不起作用
  • @Suman.hassan95 我只想要三个类别那么如何设置限制?
【解决方案2】:

通过添加指向子类别的链接来改进 Suman.hassan95 的答案。替换以下代码:

$sub_cats = get_categories( $args2 );
    if($sub_cats) {
        foreach($sub_cats as $sub_category) {
            echo  $sub_category->name ;
        }

    }

与:

$sub_cats = get_categories( $args2 );
            if($sub_cats) {
                foreach($sub_cats as $sub_category) {
                    echo  '<br/><a href="'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a>';
                }
            }

或者如果您还希望每个子类别都有一个计数器,请替换为:

$sub_cats = get_categories( $args2 );
            if($sub_cats) {
                foreach($sub_cats as $sub_category) {
                    echo  '<br/><a href="'. get_term_link($sub_category->slug, 'product_cat') .'">'. $sub_category->name .'</a>';
                    echo apply_filters( 'woocommerce_subcategory_count_html', ' <span class="cat-count">' . $sub_category->count . '</span>', $category );
                }
            }

【讨论】:

    【解决方案3】:

    你也可以使用 wp_list_categories();

    wp_list_categories( array('taxonomy' => 'product_cat', 'title_li'  => '') );
    

    【讨论】:

    • 这不会显示通常很重要的子类别
    • 这个很有用!对产品猫使用 wp_list_categories 很巧妙。它提供了所有 WordPress 内置的好东西,例如 .cat-item 类和活动类别的 .current-cat 类。很好看的分享@Etienne Dupuis
    【解决方案4】:

    在我看来这是最简单的解决方案

    $orderby = 'name';
                    $order = 'asc';
                    $hide_empty = false ;
                    $cat_args = array(
                        'orderby'    => $orderby,
                        'order'      => $order,
                        'hide_empty' => $hide_empty,
                    );
    
                    $product_categories = get_terms( 'product_cat', $cat_args );
    
                    if( !empty($product_categories) ){
                        echo '
    
                    <ul>';
                        foreach ($product_categories as $key => $category) {
                            echo '
    
                    <li>';
                            echo '<a href="'.get_term_link($category).'" >';
                            echo $category->name;
                            echo '</a>';
                            echo '</li>';
                        }
                        echo '</ul>
    
    
                    ';
                    }
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    • ul 模式看起来不错且方便。我可以将子类别嵌套在每个父类别下吗?
    【解决方案5】:
    //Recursive function
    
    function wc_loop_categories($parent = 0)
    {
    
        global $wpdb;
    
        $query = "SELECT t.term_id AS ID, t.name AS title  
            FROM {$wpdb->prefix}terms AS t
                LEFT JOIN {$wpdb->prefix}term_taxonomy AS ta
                    ON ta.term_id = t.term_id            
                WHERE ta.taxonomy='product_cat'
                    AND ta.parent=$parent
                ORDER BY t.name ASC";
    
        $cats = $wpdb->get_results($query);
    
        foreach ($cats as $key => $cat) {
            // get all sub_cats from current loop item
            $cats[$key]->sub_cats = wc_loop_categories($cat->ID);
        }
    
        return $cats;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-07
      • 2015-05-27
      • 2016-01-09
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多