当条件标签(is_product_category)同时出现在产品(和子)类别页面和商店页面中时,我无法应用以下代码。
希望大家能帮忙。
我的目标:每个产品类别页面(包括父子类别页面),小部件显示所有父子(语义相关)产品类别(不相关的产品类别需要隐藏在小部件中)。
//* Used when the widget is displayed as a dropdown
add_filter('woocommerce_product_categories_widget_dropdown_args', 'appliances', 10, 10);
//* Used when the widget is displayed as a list
add_filter('woocommerce_product_categories_widget_args', 'appliances', 10, 10);
function appliances($cat_args) {
if (is_product_category(75) || is_product_category($termchildren)) {
// Create an array that will hold the ids that need to be included
$include_terms = array();
// Push the default term that you need to shown
array_push($include_terms, 75);
// Create an array that will hold the ids that need to be included
$termchildren = get_term_children(75, 'product_cat');
}
if (is_product_category(59) || is_product_category($termchildren)) {
// Create an array that will hold the ids that need to be included
$include_terms = array();
// Push the default term that you need to shown
array_push($include_terms, 59);
// Create an array that will hold the ids that need to be included
$termchildren = get_term_children(59, 'product_cat');
}
foreach($termchildren as $child) {
$term = get_term_by('id', $child, 'product_cat');
array_push($include_terms, $term - > term_id);
}
// Finally pass the array
$cat_args['include'] = $include_terms;
}
return $cat_args;
}
经过多天的尝试和错误,这里是对我有用的代码片段:
希望对这里的任何人有所帮助,并希望有人可以改进这个答案。
//* Used when the widget is displayed as an slug (aabc) / term_id (50) lists
add_filter( 'woocommerce_product_categories_widget_args', function ( $cat_args ) {
if ( is_product_category('aabc') || is_product_category('ddef') || is_product_category('gghi') || is_product_category('jjkl') || is_product_category('mmno') || is_product_category('ppqr') || is_product_category('sstu') || is_product_category('vvwx') || is_product_category('yyz')){
// Create an array that will hold the ids that need to be included
$include_terms = array();
// Push the default term that you need to show
array_push( $include_terms, 50 );
// Create an array that will hold the ids that need to be included
$termchildren = get_term_children( 50, 'product_cat' );
// Iterate over the terms found and add it to the array which holds the IDs to include
foreach( $termchildren as $child ) {
$term = get_term_by( 'id', $child, 'product_cat' );
array_push( $include_terms, $term->term_id );
}
// Finally pass the array
$cat_args['include'] = $include_terms;
}
return $cat_args;
});
//* Used when the widget is displayed as an slug (abc) / term_id (60) lists
add_filter( 'woocommerce_product_categories_widget_args', function ( $cat_args ) {
if ( is_product_category('abc') || is_product_category('def') || is_product_category('ghi') || is_product_category('jkl') || is_product_category('mno') || is_product_category('pqr') || is_product_category('stu') || is_product_category('vwx') || is_product_category('yz')){
// Create an array that will hold the ids that need to be included
$include_terms = array();
// Push the default term that you need to show
array_push( $include_terms, 60 );
// Create an array that will hold the ids that need to be included
$termchildren = get_term_children( 60, 'product_cat' );
// Iterate over the terms found and add it to the array which holds the IDs to include
foreach( $termchildren as $child ) {
$term = get_term_by( 'id', $child, 'product_cat' );
array_push( $include_terms, $term->term_id );
}
// Finally pass the array
$cat_args['include'] = $include_terms;
}
return $cat_args;
});