从 WordPress 获取 WooCommerce 产品类别
Posted
技术标签:
【中文标题】从 WordPress 获取 WooCommerce 产品类别【英文标题】:Get WooCommerce product categories from WordPress 【发布时间】: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 '<li><a href="">'.get_categories().'</a></li>';
时,它会以数组的形式返回。我该如何解决这个问题?
如何更改此设置以从 WooCommerce 获取产品类别?
【问题讨论】:
print_r(array); ,看看会发生什么 --> 使用相关数据 【参考方案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->prefixterms AS t
LEFT JOIN $wpdb->prefixterm_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;
【讨论】:
以上是关于从 WordPress 获取 WooCommerce 产品类别的主要内容,如果未能解决你的问题,请参考以下文章