Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 当产品无法在单个页面中购买时显示自定义消息_Php_Wordpress_Woocommerce_Product_Availability - Fatal编程技术网

Php 当产品无法在单个页面中购买时显示自定义消息

Php 当产品无法在单个页面中购买时显示自定义消息,php,wordpress,woocommerce,product,availability,Php,Wordpress,Woocommerce,Product,Availability,我正在创建一个网站,这是花店。有些花是季节性的。使用插件,我在Woocommerce产品发布类型复选框列表中添加了一个自定义字段,可以从中选择可用的产品 我已经能够使用下面的代码在产品不可用的月份禁用“添加到购物车”按钮: add_filter('woocommerce_is_purchasable', 'is_available', 10, 2); function is_available() { // this is a field added using 'Advance Cus

我正在创建一个网站,这是花店。有些花是季节性的。使用插件,我在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;
}
我使用的代码有效,它从相关的单一产品页面中删除了“添加到购物车”按钮。我想添加一些信息,以便客户知道为什么它不可用。我该怎么做

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

您可以使用模板中的“可购买”来显示消息

global $product;
if ( ! $product->is_purchasable()): ?>
  <p>Sorry Not Available</p>
<?php endif;
与中一样,数组返回一个布尔值

您可以在模板中使用“可购买”来显示消息

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

正如在_数组中一样,无论如何都会返回一个布尔值

因为您有一个方法来检查每月可用的产品,所以您可以在functions.php中将该代码作为一个单独的函数编写。因此,可以从钩子中调用该函数,以删除“添加到购物车”按钮,并从用于显示消息的钩子中调用该函数

function get_product_availiblity(){
  $months = get_field('availability');
  $currentMonth = date('F');  
  if(in_array($currentMonth, $months))
    return true;
  else
    return false;
}
因此,您的woocommerce\u is\u可购买功能可以修改为

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

因为您有一个方法来检查每月可用的产品,所以您可以在functions.php中将该代码作为一个单独的函数编写。因此,可以从钩子中调用该函数,以删除“添加到购物车”按钮,并从用于显示消息的钩子中调用该函数

function get_product_availiblity(){
  $months = get_field('availability');
  $currentMonth = date('F');  
  if(in_array($currentMonth, $months))
    return true;
  else
    return false;
}
因此,您的woocommerce\u is\u可购买功能可以修改为

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

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

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

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

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

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

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

谢谢这会起作用,但问题是我正在通过Elementor页面生成器创建产品页面,所以我无法将此代码放入产品模板页面。有没有办法通过“添加”过滤器来完成此操作,这样它会删除“添加到购物车”并显示消息,而不是它。谢谢。这会起作用,但问题是我正在通过Elementor页面生成器创建产品页面,所以我无法将此代码放入产品模板页面。有没有办法通过“添加到购物车”过滤器来执行此操作,以便它删除“添加到购物车”并显示消息,而不是它。如果数组中没有“月份”,则隐藏“添加到购物车”按钮并显示消息。但当月份在数组中时,它会显示按钮,并在添加到购物车时表示抱歉,此产品无法购买。完成删除新问题,并接受您以前的答案。如果我这样做造成了负面影响,我表示歉意,我没有意识到这一点。所以问题是,如果月份不在数组中,它确实会显示消息并删除购物车按钮,但当月份在数组中时,它确实会显示购物车按钮,但当我单击“添加到购物车”时,它不会将产品添加到购物车中,并给出错误提示抱歉,无法购买此产品。例如,9月是产品可用的月份列表,它在产品页面上显示“添加到购物车”按钮,但当我添加它时,我得到了错误。@Muhammad我在这里的回答只是回答您的代码问题,显示了一些错误,由于这是基于自定义ACF字段的,因此它实际上不完全可测试。我将对此进行测试,并找出解决问题的方法。给我一些时间,我会在这里评论你,当它准备好并更新时。@MuhammadTauseef我已经测试过,在最新的Woocommerce 3.7版本中,店面主题和所有功能都非常完美,当产品可用时,单击“添加到购物车”按钮确实会将产品添加到购物车,并且没有消息表明:您无法购买此产品…或类似产品。所以还有其他一些麻烦:它可能是你做的另一个定制,主题或插件…我安装了新的wordpress,只安装了woocommerce和advanced custom field,使用了与你相同的店面主题,但我得到了这个错误。除了这两个插件,没有额外的脚本被添加到我,也没有其他插件被激活。它隐藏了添加到购物车按钮和sho
如果数组中不包含月份,则显示消息。但当月份在数组中时,它会显示按钮,并在添加到购物车时表示抱歉,此产品无法购买。完成删除新问题,并接受您以前的答案。如果我这样做造成了负面影响,我表示歉意,我没有意识到这一点。所以问题是,如果月份不在数组中,它确实会显示消息并删除购物车按钮,但当月份在数组中时,它确实会显示购物车按钮,但当我单击“添加到购物车”时,它不会将产品添加到购物车中,并给出错误提示抱歉,无法购买此产品。例如,9月是产品可用的月份列表,它在产品页面上显示“添加到购物车”按钮,但当我添加它时,我得到了错误。@Muhammad我在这里的回答只是回答您的代码问题,显示了一些错误,由于这是基于自定义ACF字段的,因此它实际上不完全可测试。我将对此进行测试,并找出解决问题的方法。给我一些时间,我会在这里评论你,当它准备好并更新时。@MuhammadTauseef我已经测试过,在最新的Woocommerce 3.7版本中,店面主题和所有功能都非常完美,当产品可用时,单击“添加到购物车”按钮确实会将产品添加到购物车,并且没有消息表明:您无法购买此产品…或类似产品。所以还有其他一些麻烦:它可能是你做的另一个定制,主题或插件…我安装了新的wordpress,只安装了woocommerce和advanced custom field,使用了与你相同的店面主题,但我得到了这个错误。除了这两个插件外,没有额外的脚本被添加到我身上,也没有其他插件被激活。它隐藏了“添加到购物车”按钮,并在数组中没有月份时显示消息。但当月份在数组中时,它会显示按钮,并在添加到购物车时表示抱歉,此产品无法购买。如果月份不在数组中,它会隐藏添加到购物车按钮并显示消息。但当月份在数组中时,它会显示按钮,并在添加到购物车时表示抱歉,此产品无法购买。