我想隐藏多个子类别(CAT1、CAT2(,使其不会显示在wooccommerce的主类别页面上。我找到了一些适用于此的代码。
add_filter( 'get_terms', 'exclude_category', 10, 3 );
function exclude_category( $terms, $taxonomies, $args ) {
$new_terms = array();
if ( is_product_category() ){
foreach ( $terms as $key => $term ) {
if( is_object ( $term ) ) {
if ( 'CAT1' == $term->slug && $term->taxonomy = 'product_cat' ) {
unset($terms[$key]);
}
elseif ( 'CAT2' == $term->slug && $term->taxonomy = 'product_cat' ) {
unset($terms[$key]);
}
}
}
}
return $terms;
}
但唯一可行的方法是,如果我创建一个新的";elseif";我想隐藏的每个类别的行。有没有办法把这两者联系在一起?
if ( 'CAT1' == $term->slug && $term->taxonomy = 'product_cat' ) {
unset($terms[$key]);
}
elseif ( 'CAT2' == $term->slug && $term->taxonomy = 'product_cat' ) {
unset($terms[$key]);
}
是的,您可以使用in_array()
,将要取消设置的术语存储在$exclude_terms
中,并将其传递到in_array($term->slug, $exclude_terms)
中。这是完整的代码:
add_filter( 'get_terms', 'exclude_category', 10, 3 );
function exclude_category( $terms, $taxonomies, $args ) {
$exclude_terms = array('CAT1', 'CAT2', 'CAT3');
if ( is_product_category() ){
foreach ( $terms as $key => $term ) {
if( is_object ( $term ) ) {
if ( in_array($term->slug, $exclude_terms) && $term->taxonomy = 'product_cat' ) {
unset($terms[$key]);
}
}
}
}
return $terms;
}