隐藏产品价格并禁用 Woocommerce 中特定产品类别的添加到购物车

Posted

技术标签:

【中文标题】隐藏产品价格并禁用 Woocommerce 中特定产品类别的添加到购物车【英文标题】:Hide product price and disable add to cart for specific product categories in Woocommerce 【发布时间】:2019-10-11 01:18:24 【问题描述】:

我正在寻找在 Woocommerce 中隐藏某些特定类别价格的正确代码。

我已经有了隐藏单品页面价格的代码:

add_action( 'wp', 'remove_prices_based_on_category' );
function remove_prices_based_on_category() 
    // On product single pages 
    if ( is_product() ) 
        remove_product_price( get_the_ID() );
    


function return_custom_price( $price, $instance ) 
    $price = '<span style="color:red; font-size:12px;">Call our office <strong>516.695.3110</strong> for prices.</span>';
    return $price; 


add_action( 'woocommerce_before_shop_loop_item', 'remove_product_price', 5, 1 ); // for each product on product listing page/shop page.
function remove_product_price( $product_id ) 
    $product_id  = get_the_ID();
    $hidden_price_category_ids = array( '27419','27421' ); // Add Product Category IDs for which the product price should be hidden.
    $product_cat_ids  = get_the_terms( $product_id, 'product_cat' ); // Getting all categories for this product.
    $cat_ids = wp_list_pluck( $product_cat_ids, 'term_id' ); // Getting all category ids for this product.   
    $result = array_intersect( $hidden_price_category_ids, $cat_ids ); // Will match hidden price categories with product categories and the cat id in the array.

    // If a hidden price category is found
    if( !empty($result) ) 
        add_filter( 'woocommerce_get_price_html', 'return_custom_price', 10, 2 );
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
        remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' );
     else 
        remove_filter( 'woocommerce_get_price_html', 'return_custom_price', 10, 2 );
        add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
        add_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart' );
    

我怎样才能为 WooCommerce 存档页面做到这一点?

【问题讨论】:

gist.github.com/arsalan13nov/bb7a8ff2c508ef547312671bd4dff5db 作为新用户,您可以使用the quick tour (30 seconds),它基本上解释了 *** 的工作原理。 【参考方案1】:

您现有的代码很复杂、未完成且不太方便。请尝试以下方法,它适用于单个产品页面也适用于存档页面 (作为商店页面)

它处理任何类型的产品,包括可变产品及其变体。

对于已定义的产品类别,它会替换价格并禁用相关产品上的添加到购物车按钮。

代码:

// Custom conditional function that check for specific product categories
function check_for_defined_product_categories( $product_id ) 
    // HERE your Product Categories where the product price need to be hidden.
    $targeted_terms = array( '27419','27421' ); // Can be term names, slugs or Ids

    return has_term( $targeted_terms, 'product_cat', $product_id );


// Custom function that replace the price by a text
function product_price_replacement()
    return '<span style="color:red; font-size:12px;">' . sprintf( __( "Call our office %s for prices."), '<strong>516.695.3110</strong>' ) . '</span>';


// Replace price by a text (conditionally)
add_filter( 'woocommerce_get_price_html', 'filter_get_price_html_callback', 10, 2 );
function filter_get_price_html_callback( $price, $product )
    if( check_for_defined_product_categories( $product->get_id() ) ) 
        $price = product_price_replacement();
    
    return $price;



// Hide prices and availiability on product variations (conditionally)
add_filter( 'woocommerce_available_variation', 'filter_available_variation_callback', 10, 3 ); // for Variations
function filter_available_variation_callback( $args, $product, $variation ) 
    if( check_for_defined_product_categories( $product->get_id() ) ) 
        $args['price_html'] = '';
        $args['availability_html'] = '';
    
    return $args;


// Disable add to cart button (conditionally)
add_filter( 'woocommerce_variation_is_purchasable', 'woocommerce_is_purchasable_filter_callback', 10, 2 );
add_filter('woocommerce_is_purchasable', 'woocommerce_is_purchasable_filter_callback', 10, 2 );
function woocommerce_is_purchasable_filter_callback( $purchasable, $product ) 
    $product_id = $product->get_parent_id() > 0 ? $product->get_parent_id() : $product->get_id();

    if( check_for_defined_product_categories( $product_id ) ) 
        $purchasable = false;
    
    return $purchasable;

代码在您的活动子主题(或活动主题)的functions.php 文件中。经过测试和工作。

【讨论】:

以上是关于隐藏产品价格并禁用 Woocommerce 中特定产品类别的添加到购物车的主要内容,如果未能解决你的问题,请参考以下文章

隐藏特定国家/地区的产品价格 WooCommerce

在 WooCommerce 中根据产品类型隐藏付款方式

隐藏产品可变价格,直到在 WooCommerce 中选择所有变体字段

禁用 Woocommerce 购物车订单项数量价格计算

从 WooCommerce 中的类别价格后缀更改中排除特定产品 ID

从 Woocommerce 订阅价格中隐藏“免费试用”文本