在Woocommerce单品页面上排除特定的产品类别

时间:2018-01-29 09:35:38

标签: php wordpress woocommerce product custom-taxonomy

我正在尝试排除某些类别在WooCommerce产品页面上显示。

示例:如果在单个产品页面中我有“类别: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)时,它会显示正确的事情。

3 个答案:

答案 0 :(得分:3)

您应该尝试使用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文件。

经过测试和工作。

答案 1 :(得分:0)

试试这个:

将以下代码添加到var

single-product.php

答案 2 :(得分:0)

您可以通过在 app.directive('onlyNumber', function () { return { require: 'ngModel', restrict: 'A', link: function (scope, element, attr, modelCtrl) { function fromUser(text) { if (text) { var transformedInput = text.replace(/[^0-9-]/g, ''); if (transformedInput !== text) { modelCtrl.$setViewValue(transformedInput); modelCtrl.$render(); } return transformedInput; } return undefined; } modelCtrl.$parsers.push(fromUser); } }; }); 挂钩上添加过滤器,然后在单个产品页面上运行get_terms时从术语列表中排除上述类别ID来实现此目的如果提取的字词为get_terms(),则

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; }