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

Display a custom message when a product is not purchassable in Woocommerce single pages

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

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

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

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

我只需要知道如何在产品缺货时添加消息。

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

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

如果你只想 return 对或错,你可以做一些旁注

return in_array($currentMonth, $months)

as in_array return无论如何都是布尔值

由于您有一种检查产品可用月份的方法,因此您可以将该代码作为单独的函数编写在 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 );

您的代码中存在一些错误,例如缺少为此挂钩声明的 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>';