Php 当产品无法在单个页面中购买时显示自定义消息
我正在创建一个网站,这是花店。有些花是季节性的。使用插件,我在Woocommerce产品发布类型复选框列表中添加了一个自定义字段,可以从中选择可用的产品 我已经能够使用下面的代码在产品不可用的月份禁用“添加到购物车”按钮: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
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,使用了与你相同的店面主题,但我得到了这个错误。除了这两个插件外,没有额外的脚本被添加到我身上,也没有其他插件被激活。它隐藏了“添加到购物车”按钮,并在数组中没有月份时显示消息。但当月份在数组中时,它会显示按钮,并在添加到购物车时表示抱歉,此产品无法购买。如果月份不在数组中,它会隐藏添加到购物车按钮并显示消息。但当月份在数组中时,它会显示按钮,并在添加到购物车时表示抱歉,此产品无法购买。