【问题标题】:Conditionally removing add-to-cart button and hiding prices for product categories有条件地删除添加到购物车按钮并隐藏产品类别的价格
【发布时间】:2017-02-10 16:16:21
【问题描述】:

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

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

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

谢谢。

更新

【问题讨论】:

  • 你在哪里调用或挂钩你的函数show_price_logged($price)

标签: php wordpress woocommerce categories product


【解决方案1】:

由于您没有为您的函数使用提供任何钩子,为了测试它并使其工作,我在这里使用了 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 文件或任何插件文件中。

此代码已经过测试并且可以工作,它应该也适合您。


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

商店页面(或档案):

产品页面:

这简直完美......

与您在 cmets 中的错误有关:
Warning: Missing argument 2 for show_price_logged() …

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

function show_price_logged( $price, $product ){

而不是这个:

function show_price_logged( $price ){

当您在 add_filter() 挂钩的末尾声明 2 个参数时……

【讨论】:

  • 警告:/home/content/p3pnexwpnas16_data03/22/3703422/html/wp-content/themes/flatastic-child/functions.php 中的 show_price_logged() 缺少参数 2
  • @user3696585 我已经更新了我的答案,并在末尾添加了与您的错误相关的解释。我还在第一个 if 语句中将 || 更改为 &amp;&amp;这段代码完美运行,我已经重新测试过。
  • 我正在使用产品滑块的屏幕截图更新问题
  • @user3696585 抱歉,这段代码运行良好,我现在重新测试一下……我已经用商店页面的新屏幕截图更新了我的答案。这个问题肯定和你的主题有关,可以肯定的是,首先备份数据库,切换到Wordpress默认主题,将代码添加到这个默认主题的function.php文件中并保存。您会看到代码正常运行。
猜你喜欢
  • 2023-04-07
  • 2017-12-08
  • 1970-01-01
  • 1970-01-01
  • 2016-04-05
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多