我正在处理WP single.php(已安装woocommerce)。 我需要检查当前页面是否是产品页面:如果是,还请检查该产品是否在XXX的子类别中。
我找到了这段代码:
if ( ! function_exists( 'post_is_in_descendant_category' ) ) {
function post_is_in_descendant_category( $cats, $_post = null ) {
foreach ( (array) $cats as $cat ) {
// get_term_children() accepts integer ID only
$descendants = get_term_children( (int) $cat, 'category' );
if ( $descendants && in_category( $descendants, $_post ) )
return true;
}
return false;
}
}
这在我的常规页面上效果很好,但在我的产品页面上效果不佳。
现在我当前使用此代码:
if ( is_product() && has_term( 'XXX', 'product_cat' ) ) {
问题是这不检查子类别。有帮助吗?
答案 0 :(得分:1)
您使用的功能仅检查类别分类法。在产品页面上使用此功能。我已经将'category'替换为'product_cat',并将in_category
替换为has_term
,因为这仅适用于类别
<?php
if (!function_exists('product_is_in_descendant_category')) {
function product_is_in_descendant_category($cats, $_post = null)
{
foreach ((array)$cats as $cat) {
// get_term_children() accepts integer ID only
$descendants = get_term_children((int)$cat, 'product_cat');
if ($descendants && has_term($descendants, 'product_cat', $_post)) {
return true;
}
}
return false;
}
}
或向第一个读取$ tax ='category'的函数添加第三个参数,并在第5行用$ tax替换'category'。然后在产品页面上调用该函数时,将'product_cat'作为第三个参数。仅供参考,这样做还需要您将in_category
替换为has_term