从 WooCommerce 购物车错误消息中删除库存数量
Remove the stock quantity from WooCommerce cart error messages
在 WooCommerce 中,我已将 woocommerce->设置->产品->库存->库存显示格式设置为 "Never show quantity remaining in stock".
但是,如果客户将产品广告添加到购物车,继续进入购物车或结帐页面并输入高于我们库存的价值,他们会收到此错误消息:
Sorry, we do not have enough "{product_name}
" in stock to fulfill your order ({available_stock_amount}
in stock). Please edit your cart and try again. We apologize for any inconvenience caused.
我可以使用什么过滤器来编辑此输出?我不希望它显示(绝对在前端商店的任何地方)实际可用库存量。
我发现这是在函数 (check_cart_item_stock) 中处理的,[root]->wp-content->plugins->woocommerce->includes->class-wc-cart.php 第 491 行:
if ( ! $product->has_enough_stock( $product_qty_in_cart[ $product->get_stock_managed_by_id() ] ) ) {
/* translators: 1: product name 2: quantity in stock */
$error->add( 'out-of-stock', sprintf( __( 'Sorry, we do not have enough "%1$s" in stock to fulfill your order (%2$s in stock). Please edit your cart and try again. We apologize for any inconvenience caused.', 'woocommerce' ), $product->get_name(), wc_format_stock_quantity_for_display( $product->get_stock_quantity(), $product ) ) );
return $error;
}
所以我要过滤掉的是“(%2$s in stock)
”部分。但是我找不到任何过滤器。
显示的这些消息位于第 493 行和第 522 行的 WC_Cart class source code 中……
您可以尝试在 WordPress gettex
过滤器钩子中使用自定义文本版本替换文本:
add_filter( 'gettext', 'wc_replacing_cart_stock_notices_texts', 50, 3 );
function wc_replacing_cart_stock_notices_texts( $replacement_text, $source_text, $domain ) {
// Here the sub string to search
$substring_to_search = 'Sorry, we do not have enough';
// The text message replacement
if( strpos( $source_text, $substring_to_search ) ) {
// define here your replacement text
$replacement_text = __( 'Sorry, we do not have enough products in stock to fulfill your order…', $domain );
}
return $replacement_text;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
这应该有效(未测试)…
感谢@LoicTheAztec 的回复,但我毕竟找到了过滤器,woocommerce_add_error
所以我的最终过滤器(在 functions.php 中)是这样的:
function remove_stock_info_error($error){
global $woocommerce;
foreach ($woocommerce->cart->cart_contents as $item) {
$product_id = isset($item['variation_id']) ? $item['variation_id'] : $item['product_id'];
$product = new \WC_Product_Factory();
$product = $product->get_product($product_id);
if ($item['quantity'] > $product->get_stock_quantity()){
$name = $product->get_name();
$error = 'Sorry, we do not have enough "'.$name.'" in stock to fulfill your order. Please edit your cart and try again. We apologize for any inconvenience caused.';
return $error;
}
}
}add_filter( 'woocommerce_add_error', 'remove_stock_info_error' );
这应该可以全面解决它。
注意! 我还发现输入框有一个 max 属性,这反过来意味着任何人仍然可以看到实际的总可用金额(通过简单地使用内置增量(达到最大值时将停止)或仅输入一个值的最大值,单击更新购物车,您将收到一条通知,指出该金额必须等于或小于X(最大值))。
为了解决这个问题,我在预先存在的 "woo-xtra.js" 中添加了一个简单的 JS:
var qty = $('form.woocommerce-cart-form').find('input.qty');
// Reset max value for quantity input box to hide real stock
qty.attr('max', '');
这样就没有最大值了,但是用户仍然会从上面得到错误(如果超过限制):)
即问题已解决
在 WooCommerce 中,我已将 woocommerce->设置->产品->库存->库存显示格式设置为 "Never show quantity remaining in stock".
但是,如果客户将产品广告添加到购物车,继续进入购物车或结帐页面并输入高于我们库存的价值,他们会收到此错误消息:
Sorry, we do not have enough "
{product_name}
" in stock to fulfill your order ({available_stock_amount}
in stock). Please edit your cart and try again. We apologize for any inconvenience caused.
我可以使用什么过滤器来编辑此输出?我不希望它显示(绝对在前端商店的任何地方)实际可用库存量。
我发现这是在函数 (check_cart_item_stock) 中处理的,[root]->wp-content->plugins->woocommerce->includes->class-wc-cart.php 第 491 行:
if ( ! $product->has_enough_stock( $product_qty_in_cart[ $product->get_stock_managed_by_id() ] ) ) {
/* translators: 1: product name 2: quantity in stock */
$error->add( 'out-of-stock', sprintf( __( 'Sorry, we do not have enough "%1$s" in stock to fulfill your order (%2$s in stock). Please edit your cart and try again. We apologize for any inconvenience caused.', 'woocommerce' ), $product->get_name(), wc_format_stock_quantity_for_display( $product->get_stock_quantity(), $product ) ) );
return $error;
}
所以我要过滤掉的是“(%2$s in stock)
”部分。但是我找不到任何过滤器。
显示的这些消息位于第 493 行和第 522 行的 WC_Cart class source code 中……
您可以尝试在 WordPress gettex
过滤器钩子中使用自定义文本版本替换文本:
add_filter( 'gettext', 'wc_replacing_cart_stock_notices_texts', 50, 3 );
function wc_replacing_cart_stock_notices_texts( $replacement_text, $source_text, $domain ) {
// Here the sub string to search
$substring_to_search = 'Sorry, we do not have enough';
// The text message replacement
if( strpos( $source_text, $substring_to_search ) ) {
// define here your replacement text
$replacement_text = __( 'Sorry, we do not have enough products in stock to fulfill your order…', $domain );
}
return $replacement_text;
}
代码进入您的活动子主题(或主题)的 function.php 文件或任何插件文件。
这应该有效(未测试)…
感谢@LoicTheAztec 的回复,但我毕竟找到了过滤器,woocommerce_add_error
所以我的最终过滤器(在 functions.php 中)是这样的:
function remove_stock_info_error($error){
global $woocommerce;
foreach ($woocommerce->cart->cart_contents as $item) {
$product_id = isset($item['variation_id']) ? $item['variation_id'] : $item['product_id'];
$product = new \WC_Product_Factory();
$product = $product->get_product($product_id);
if ($item['quantity'] > $product->get_stock_quantity()){
$name = $product->get_name();
$error = 'Sorry, we do not have enough "'.$name.'" in stock to fulfill your order. Please edit your cart and try again. We apologize for any inconvenience caused.';
return $error;
}
}
}add_filter( 'woocommerce_add_error', 'remove_stock_info_error' );
这应该可以全面解决它。
注意! 我还发现输入框有一个 max 属性,这反过来意味着任何人仍然可以看到实际的总可用金额(通过简单地使用内置增量(达到最大值时将停止)或仅输入一个值的最大值,单击更新购物车,您将收到一条通知,指出该金额必须等于或小于X(最大值))。
为了解决这个问题,我在预先存在的 "woo-xtra.js" 中添加了一个简单的 JS:
var qty = $('form.woocommerce-cart-form').find('input.qty');
// Reset max value for quantity input box to hide real stock
qty.attr('max', '');
这样就没有最大值了,但是用户仍然会从上面得到错误(如果超过限制):)
即问题已解决