在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;
}
但它没有按预期工作,并且条件匹配时不会删除添加到购物车的按钮。
任何帮助将不胜感激。我怎样才能做到这一点?
感谢。
已更新
答案 0 :(得分:4)
由于您没有为您的功能使用提供任何钩子,为了测试它并使其正常工作,我在这里使用了woocommerce_price_html
和woocommerce_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):
产品页面:
这完全有效......
与评论中的错误相关:
Warning: Missing argument 2 for show_price_logged() …
强>:这意味着您忘记了四个函数中的
$product
参数。你需要这个:function show_price_logged( $price, $product ){
而不是:
function show_price_logged( $price ){
当您在
add_filter()
挂钩结尾处声明2个参数时......