有条件地删除“添加到购物车”按钮并隐藏产品类别的价格

时间:2017-02-10 16:16:22

标签: php wordpress woocommerce categories product

在WooCommerce中,我尝试根据某些产品类别从我的主页滑块中删除“添加到购物车”按钮并隐藏价格。

我试图使用该代码:

/* Code for authorisation */

function show_price_logged($price){
if(! is_user_logged_in()) {

        if(has_term( 'teamine', 'product_cat' )){  /* sub categories need not authorisation, but thier parent category needs authorisation */
            return $price;
        }
        if(has_term( 'epicuren', 'product_cat' ) || has_term( 'revision', 'product_cat' ) || has_term( 'image-2', 'product_cat' )){  /* categories needs authorisation */
            remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
            remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );    
            remove_action( 'woocommerce_grouped_add_to_cart', 'woocommerce_grouped_add_to_cart', 30 );
            return '<a class="amount authorizelink" href="/how-to-get-authorized-its-easy">Authorization needed to purchase <span>Click Here</span></a>';
    }
        if(has_term( 'skinceuticals', 'product_cat' ) || has_term( 'lira', 'product_cat' )){
        remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
            remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
            remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );    
            remove_action( 'woocommerce_grouped_add_to_cart', 'woocommerce_grouped_add_to_cart', 30 );
            return '<a href="www.radiantskincarespa.com">Please contact the Spa to arrange a consultation and to purchase this product <span></span></a>';
    }
    else{
        return $price;
    }
}
else return $price;
}

但它没有按预期工作,并且条件匹配时不会删除添加到购物车的按钮。

任何帮助将不胜感激。我怎样才能做到这一点?

感谢。

已更新

screenshot of error

1 个答案:

答案 0 :(得分:4)

由于您没有为您的功能使用提供任何钩子,为了测试它并使其正常工作,我在这里使用了woocommerce_price_htmlwoocommerce_sale_price_html过滤器钩子(对于简单的产品)。

我已经更改了一些代码,现在它已成功运行:

add_filter('woocommerce_price_html','show_price_logged', 10, 2 );
add_filter('woocommerce_sale_price_html','show_price_logged', 10, 2 );

function show_price_logged( $price, $product ){

    if( !is_user_logged_in() && !has_term( 'teamine', 'product_cat', $product->id ) ){

        remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
        remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 );
        remove_action( 'woocommerce_simple_add_to_cart', 'woocommerce_simple_add_to_cart', 30 );
        remove_action( 'woocommerce_grouped_add_to_cart', 'woocommerce_grouped_add_to_cart', 30 );

        if( has_term( 'epicuren', 'product_cat', $product->id ) || has_term( 'revision', 'product_cat', $product->id ) || has_term( 'image-2', 'product_cat', $product->id ) )
        {
            $price = '<a class="amount authorizelink" href="/how-to-get-authorized-its-easy">Authorization needed to purchase <span>Click Here</span></a>';
        }
        elseif( has_term( 'skinceuticals', 'product_cat', $product->id ) || has_term( 'lira', 'product_cat', $product->id ) )
        {
            $price = '<a href="www.radiantskincarespa.com">Please contact the Spa to arrange a consultation and to purchase this product <span></span></a>';
        }
        else // set here another text + link in case of…
        {
            $price = '<a href="#">LINK </a><span>NON LOGGED USER / NO TARGETED CATEGORY</span>';
        }
    }

    return $price;
}
  

我已添加最终条件(如果是),需要自定义文字+链接...

代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。

此代码已经过测试并且有效,它也适用于您。

更新:在测试服务器上查看结果:

SHOP PAGE(OR ARCHIVES):

PRODUCTS ON SHOP PAGE

产品页面:

PRODUCT PAGES

这完全有效......

  

与评论中的错误相关:
  Warning: Missing argument 2 for show_price_logged() …

     

这意味着您忘记了四个函数中的 $product 参数。你需要这个:

function show_price_logged( $price, $product ){
     

而不是:

function show_price_logged( $price ){
     

当您在add_filter()挂钩结尾处声明2个参数时......