1

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

我已经能够使用以下代码在产品不可用的月份禁用“添加到购物车”按钮:

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

我使用的代码有效,它从相关的单个产品页面中删除了添加到购物车按钮。我想添加一些消息,以便客户知道为什么它不可用。我怎样才能做到这一点?

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

4

3 回答 3

4

您的代码中有一些错误,例如为此钩子声明的 2 个缺少的函数变量。

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

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 文件中。测试和工作。

在此处输入图像描述


您还可以显示一个带有短文本的禁用按钮,在我的代码中替换:

echo '<p style="color:#e00000;">' . __("This product is currently unavailable.") . '</p>';

这样:

echo '<a class="button alt disabled">' . __("Currently unavailable.") . '</a>';

在此处输入图像描述

于 2019-03-30T10:42:18.220 回答
0

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

global $product;
if ( ! $product->is_purchasable()): ?>
  <p>Sorry Not Available</p>
<?php endif;

如果您只想返回 true 或 false,您可以做一点旁注

return in_array($currentMonth, $months)

因为 in_array 无论如何都会返回一个布尔值

于 2019-03-30T01:18:44.120 回答
0

由于您有一种检查产品可用月份的方法,因此您可以将该代码编写为您的 functions.php 中的单独函数。因此,可以从挂钩中调用该函数以删除添加到购物车按钮,也可以从用于显示消息的挂钩中调用该函数。

function get_product_availiblity(){
  $months = get_field('availability');
  $currentMonth = date('F');  
  if(in_array($currentMonth, $months))
    return true;
  else
    return false;
}

所以你的woocommerce_is_purchasable功能可以修改为

function is_available() {
  $availibilty = get_product_availiblity();
  return $availibilty;
}
add_filter('woocommerce_is_purchasable', 'is_available', 10, 2);

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

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 );
于 2019-03-30T06:50:53.473 回答