我想做的是在我的WooCommerce商店的侧边栏上显示一个菜单,上面有当前产品类别名称和当前类别的子项。如果产品类别没有子类,那么它应该显示父类别和父类别子类。
这是层次结构的样子:商店
当你在“准备好的食物”页面上时,你应该看到。
制备食品
当你在食品页面上时,你应该看到
制备食品
现在,我已经让它在您处于顶级类别时显示父类别链接,但我还没有让它在您处于顶级类别时显示父类别名称。以下是我目前掌握的代码:
<?php
$queried_object = get_queried_object();
if ( is_product_category() && is_a($queried_object, 'WP_Term') ) {
$taxonomy = $queried_object->taxonomy;
echo '<h2 class="shop__sidebar-heading">
<a href="' . get_term_link( $queried_object ) . '">' . $queried_object->name . '</a>
</h2>';
}
?>
<?php
$term = get_queried_object()->term_id;
$termid = get_term($term, 'product_cat' );
if($termid->parent > 0)
{
$args = array(
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
'child_of' => $termid->parent,
);
$siblingproducts = get_terms( 'product_cat', $args);
foreach ($siblingproducts as $siblingproduct) {
if ($siblingproduct->term_id == $term ) { ?>
<li>
<?php } else { ?>
<li>
<?php } ?>
<a href="<?php
echo get_term_link( $siblingproduct ); ?>"><?php echo $siblingproduct->name; ?><?php
echo "<span class='count'>" . $siblingproduct->count . "</span>"; ?></a></li>
<?php }
} else {
$args = array(
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
'child_of' => $term
);
$subproducts = get_terms( 'product_cat', $args);
foreach ($subproducts as $subproduct) { ?>
<li> <a href="<?php echo get_term_link( $subproduct ); ?>"><?php echo $subproduct->name; ?><?php echo "<span class='count'>" . "</span>"; ?></a></li>
<?php }
}
?>
我试图实现的一个例子可以在Food52网站边栏上看到https://food52.com/shop/pantry
您可以使用以下代码获取类别和子类别。你需要根据你的需要调用下面的函数,传递参数。
/**
* Get Category
* @param $taxonomy
* @param string $order
* @return array
*/
function getPostTermCategory($taxonomy, $order = 'asc')
{
$term_query = new WP_Term_Query([
'taxonomy' => $taxonomy,
'order' => $order,
'hide_empty' => false,
'parent' => 0
]);
$categories = [];
foreach ($term_query->terms as $term) {
$categories[] = $term;
}
return $categories;
}
/**
* Get Child Categories of Parent
* @param $taxonomy
* @param $parentId
* @param string $order
* @return array
*/
function getPostTermChildCategory($taxonomy, $parentId, $order = 'asc')
{
$term_query = new WP_Term_Query([
'taxonomy' => $taxonomy,
'order' => $order,
'hide_empty' => false,
'parent' => $parentId
]);
$categories = [];
foreach ($term_query->terms as $term) {
$categories[] = $term;
}
return $categories;
}
在此过程中,我已经自由地清理了一些事情(比如删除一些不必要的打开/关闭PHP标记)和一些澄清的事情——我希望您不会介意!检查现有代码:
>
is_tax()
函数,该函数将为您处理该问题。
您似乎有一个未使用的$taxonomy
声明
它在WordPress提供的函数中不太重要,但是养成在属性字段中使用esc\u url
和esc\u attr
的习惯是很好的。
您在获取$术语
集时遇到了一些冗余问题。似乎您也可以/应该将它们向上移动到您的外部if
语句中,因为您已经在检查它是否是一个WP_Term
对象,所以您不必担心没有设置或重新定义其中的值。此外,您的$术语
和$termid
声明有点混合,似乎它们被翻转了($术语
是ID,$termid
是实际对象)
您似乎在创建两个独立的循环参数数组(以及后续循环),除了更改变量名之外,没有任何真正的原因,这只是基于它是否是顶级术语(parent_id)
你添加了一个条件
您似乎没有
我对WooCommerce很熟悉,但目前还没有在我的垃圾场网站上安装它,但我已经从中重新创建了类别(
product_cat
)结构,并使用了此代码(只是更改了分类法),它似乎满足了您的要求:
<?php
if( is_product_category() ){
$queried_object = get_queried_object();
$child_terms = get_term_children( $queried_object->term_id, 'product_cat' );
$based_term = (is_wp_error($child_terms) || empty($child_terms)) ? get_term( $queried_object->parent, 'product_cat' ) : $queried_object;
printf( '<h2 class="shop__sidebar-heading">
<a href="%s?so64231449=true">%s</a>
</h2>', esc_url(get_term_link($based_term->term_id)), $based_term->name );
$display_terms = get_terms( 'product_cat', array(
'orderby' => 'name',
'order' => 'ASC',
'hide_empty' => false,
'parent' => $based_term->term_id,
) );
if( !empty($display_terms) && !is_wp_error($display_terms) ){
echo '<ul>';
foreach( $display_terms as $display_term ){
printf(
'<li%s><a href="%s">%s <span class="count">%s</span></a></li>',
($display_term->term_id == $queried_object->term_id) ? ' class="active"' : '',
esc_url(get_term_link($display_term->term_id)),
$display_term->name,
number_format($display_term->count)
);
}
echo '</ul>';
}
}
?>
几点注意事项
>
第一个参数是要使用的字符串
三元运算符基本上是一个简洁的单行“if/else”语句。这使您可以很容易地在与其他术语相同的声明中检查
active
WP\u术语。
这里有几个链接向您展示它的工作原理(滚动到页面底部):
食品储藏室(或预备食品)
- 咖啡
我试图在WooCommerce的子类别页面中查找父类别名称,即我有4个主要类别。 父母1 子1 子2 子3等 父母2 子1 子2 子3等 等等。 如果我在Sub2的列表页上,Sub2是Parent1的子级,我想知道Parent1类别的名称。
我正在研究一个场景,其中有多个父类别,每个父类别都有多个子类别。 我已经设置了父类别来显示子类别,而不是产品。 下面是我当前的层次结构: 父类别1 子类别1 子类别2 子类别3 父类别2 子类别4 一切都很好,但我想做一件额外的事情,显示所有子类别的描述,当它们显示在父类别下。 我知道子类别的标题在查看父类别时默认显示,但是,我找不到一种方法来覆盖默认循环以显示父类别中子类别的描述。 任何帮助都将
我需要一些关于Woocommerce类别显示选项的帮助。在Wordpress仪表板中,我按照以下链接全局设置类别显示选项<外观- 有三种显示选项可用。 展示产品 目前,选择了第三个选项,它显示子类别以及父类别和子类别下的所有产品。但是,我想排除子类别下的所有产品。换句话说,我只想在父类别下显示子类别和产品。 我在几个教程网站上找到了以下片段。代码完全按照我想要的方式工作,但它也禁用了管理产品搜索和
我是初学者(PHP) 我显示这个日期在PHP嵌套'ul'喜欢(代码)- 一切都很好,没有问题。。。。我的问题,如果点击主分类得到我在这个类别中还没有主题。。。。我需要代码来选择用户是否在主类别中选择了主类别回显子类别——如果选择了子类别,则只显示子类别中的数据,或者用户是否在主类别示例中选择了主类别回显主题::我有类别Photosession和子类别- > 通知- 这是我选择帖子的代码 我认为我的
我正试图通过WoodPress主题中的一个函数从woocommerce获取产品类别,我已经做到了: 这将按层次列出所有顶级类别及其下的子类别,但我有子类别(子类别)的子类别,因此如何列出这些子类别。
我的类别表设计如下 我有三个级别的类别 < li >父项 < li >孩子 < li >子系 如何以下列方式显示它们? (SELECT*From类别):我得到以下数组,如下所示