首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Woocommerce单页中无法购买产品时,显示自定义消息

在Woocommerce单页中无法购买产品时,显示自定义消息
EN

Stack Overflow用户
提问于 2019-03-30 01:00:44
回答 3查看 4.3K关注 0票数 1

我正在创建一个网站,是花店。有些花是季节性的。使用高级自定义域插件,我在Woocommerce产品帖子类型(复选框)列表中添加了一个自定义字段,以选择可以在其中提供产品的月份。

在使用以下代码无法使用产品的几个月中,我一直能够禁用“添加到购物车”按钮:

代码语言:javascript
复制
add_filter('woocommerce_is_purchasable', 'is_available', 10, 2);
function is_available() {
    // this is a field added using 'Advance Custom Fields' plugin 
    $months = get_field('availability');
    $currentMonth = date('F');

    if(in_array($currentMonth, $months))
        return true;
    else
        return false;
}

我使用的代码工作,它删除添加购物车按钮从相关的单一产品页。我想添加一些信息,这样客户就会知道为什么它是不可用的。我怎么能这么做?

当产品不可用时,我只需要知道如何添加信息。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-03-30 10:42:18

代码中有一些错误,比如为这个钩子声明的两个缺少的函数变量。

当产品不可用时,下列重新访问的代码包括显示的自定义消息:

代码语言:javascript
复制
add_filter('woocommerce_is_purchasable', 'woocommerce_is_purchasable_filter_callback', 10, 2 );
function woocommerce_is_purchasable_filter_callback( $purchasable, $product ) {
    $months      = (array) get_field('availability');
    $purchasable = in_array( date('F'), $months ) ? $purchasable : false;

    return $purchasable;
}

add_action( 'woocommerce_single_product_summary', 'unavailable_product_display_message', 20 );
function unavailable_product_display_message() {
    global $product;

    if(! $product->is_purchasable() ){
        echo '<p style="color:#e00000;">' . __("This product is currently unavailable.") . '</p>';
    }
}

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

您还可以使用简短的文本显示禁用的按钮,替换为:

代码语言:javascript
复制
echo '<p style="color:#e00000;">' . __("This product is currently unavailable.") . '</p>';

通过这一点:

代码语言:javascript
复制
echo '<a class="button alt disabled">' . __("Currently unavailable.") . '</a>';

票数 4
EN

Stack Overflow用户

发布于 2019-03-30 01:18:44

您可以在模板中使用is_purchasable来显示消息。

代码语言:javascript
复制
global $product;
if ( ! $product->is_purchasable()): ?>
  <p>Sorry Not Available</p>
<?php endif;

如果你只想返回真或假,你可以这样做。

代码语言:javascript
复制
return in_array($currentMonth, $months)

因为in_array仍然返回一个布尔值

票数 0
EN

Stack Overflow用户

发布于 2019-03-30 06:50:53

由于您有一个方法来检查产品可用月份,所以可以在functions.php.中将该代码作为单独的函数编写。因此,该函数可以从钩子中调用以移除add to cart按钮,并从用于显示消息的钩子中调用。

代码语言:javascript
复制
function get_product_availiblity(){
  $months = get_field('availability');
  $currentMonth = date('F');  
  if(in_array($currentMonth, $months))
    return true;
  else
    return false;
}

因此,您的woocommerce_is_purchasable函数可以修改为

代码语言:javascript
复制
function is_available() {
  $availibilty = get_product_availiblity();
  return $availibilty;
}
add_filter('woocommerce_is_purchasable', 'is_available', 10, 2);

要显示消息,可以添加以下钩子

代码语言:javascript
复制
function show_availibilty_message() {
  $availibilty_msg = get_product_availiblity();
  if(!$availibilty_msg){
    echo '<p>This product is not available for this month</p>';
  }
}
add_action( 'woocommerce_single_product_summary', 'show_availibilty_message', 20 );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55427175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档