在 Woocommerce 单个产品页面上排除特定产品类别
Exclude specific product categories on Woocommerce single product pages
我正在尝试排除某些类别,使其不显示在 WooCommerce 产品页面上。
示例:如果在单个产品页面中我有 "Categories: Cat1, Cat"2",我希望只显示 Cat1。
我尝试编辑单品模板中的meta.php。
我创建了一个新函数:
$categories = $product->get_category_ids();
$categoriesToRemove = array(53,76,77,78); // my ids to exclude
foreach ( $categoriesToRemove as $categoryKey => $category) {
if (($key = array_search($category, $categories)) !== false) {
unset($categories[$key]);
}
}
$categoriesNeeded = $categories;
然后我收到来自 WooCommerce 的回应:
echo wc_get_product_category_list( $product->get_id(), ', ', '<span class="posted_in">' . _n( 'Category:', 'Categories:', count($categories), 'woocommerce' ) . ' ', '</span>' );
但它仍然显示相同的类别。奇怪的是,当我执行 var_dump($categories)
时,它显示了正确的内容。
试试这个:
将以下代码添加到 single-product.php
add_filter( 'get_terms', 'organicweb_exclude_category', 10, 3 );
function organicweb_exclude_category( $terms, $taxonomies, $args ) {
$new_terms = array();
// if a product category and on a page
if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_page() ) {
foreach ( $terms as $key => $term ) {
// Enter the name of the category you want to exclude in place of 'uncategorised'
if ( ! in_array( $term->slug, array( 'uncategorised' ) ) ) {
$new_terms[] = $term;
}
}
$terms = $new_terms;
}
return $terms;
}
您可以通过在 get_terms
挂钩上添加一个过滤器来实现此目的,然后如果 get_terms()
是 运行 则从术语列表中排除上述类别 ID产品页面 和 如果获取的术语是 product_cat
。
add_filter( 'get_terms', 'danski_single_product_exclude_category', 10, 3 );
function danski_single_product_exclude_category( $terms, $taxonomies, $args ) {
$new_categories = array();
// if a product category and a single product
if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_product() ) {
foreach ( $terms as $key => $term ) {
if ( ! in_array( $term->term_id, array( 53,76,77,78 ) ) ) { //add the category id's that you want to exclude here
$new_categories[] = $term;
}
}
$terms = $new_categories;
}
return $terms;
}
您可以将此代码添加到您的 functions.php
。
您应该试试这个挂在 get_the_terms
过滤器挂钩中的自定义函数,它将排除要在单个产品页面上显示的特定产品类别:
add_filter( 'get_the_terms', 'custom_product_cat_terms', 20, 3 );
function custom_product_cat_terms( $terms, $post_id, $taxonomy ){
// HERE below define your excluded product categories Term IDs in this array
$category_ids = array( 53,76,77,78 );
if( ! is_product() ) // Only single product pages
return $terms;
if( $taxonomy != 'product_cat' ) // Only product categories custom taxonomy
return $terms;
foreach( $terms as $key => $term ){
if( in_array( $term->term_id, $category_ids ) ){
unset($terms[$key]); // If term is found we remove it
}
}
return $terms;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。
已测试并有效。
我正在尝试排除某些类别,使其不显示在 WooCommerce 产品页面上。
示例:如果在单个产品页面中我有 "Categories: Cat1, Cat"2",我希望只显示 Cat1。
我尝试编辑单品模板中的meta.php。 我创建了一个新函数:
$categories = $product->get_category_ids();
$categoriesToRemove = array(53,76,77,78); // my ids to exclude
foreach ( $categoriesToRemove as $categoryKey => $category) {
if (($key = array_search($category, $categories)) !== false) {
unset($categories[$key]);
}
}
$categoriesNeeded = $categories;
然后我收到来自 WooCommerce 的回应:
echo wc_get_product_category_list( $product->get_id(), ', ', '<span class="posted_in">' . _n( 'Category:', 'Categories:', count($categories), 'woocommerce' ) . ' ', '</span>' );
但它仍然显示相同的类别。奇怪的是,当我执行 var_dump($categories)
时,它显示了正确的内容。
试试这个:
将以下代码添加到 single-product.php
add_filter( 'get_terms', 'organicweb_exclude_category', 10, 3 );
function organicweb_exclude_category( $terms, $taxonomies, $args ) {
$new_terms = array();
// if a product category and on a page
if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_page() ) {
foreach ( $terms as $key => $term ) {
// Enter the name of the category you want to exclude in place of 'uncategorised'
if ( ! in_array( $term->slug, array( 'uncategorised' ) ) ) {
$new_terms[] = $term;
}
}
$terms = $new_terms;
}
return $terms;
}
您可以通过在 get_terms
挂钩上添加一个过滤器来实现此目的,然后如果 get_terms()
是 运行 则从术语列表中排除上述类别 ID产品页面 和 如果获取的术语是 product_cat
。
add_filter( 'get_terms', 'danski_single_product_exclude_category', 10, 3 );
function danski_single_product_exclude_category( $terms, $taxonomies, $args ) {
$new_categories = array();
// if a product category and a single product
if ( in_array( 'product_cat', $taxonomies ) && ! is_admin() && is_product() ) {
foreach ( $terms as $key => $term ) {
if ( ! in_array( $term->term_id, array( 53,76,77,78 ) ) ) { //add the category id's that you want to exclude here
$new_categories[] = $term;
}
}
$terms = $new_categories;
}
return $terms;
}
您可以将此代码添加到您的 functions.php
。
您应该试试这个挂在 get_the_terms
过滤器挂钩中的自定义函数,它将排除要在单个产品页面上显示的特定产品类别:
add_filter( 'get_the_terms', 'custom_product_cat_terms', 20, 3 );
function custom_product_cat_terms( $terms, $post_id, $taxonomy ){
// HERE below define your excluded product categories Term IDs in this array
$category_ids = array( 53,76,77,78 );
if( ! is_product() ) // Only single product pages
return $terms;
if( $taxonomy != 'product_cat' ) // Only product categories custom taxonomy
return $terms;
foreach( $terms as $key => $term ){
if( in_array( $term->term_id, $category_ids ) ){
unset($terms[$key]); // If term is found we remove it
}
}
return $terms;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。
已测试并有效。