Iin WooCommerce,我已将woocommerce-> settings-> products-> inventory->库存显示格式设置为"从不显示库存中的剩余数量"
但是,如果客户将产品广告到购物车,继续购物或结帐页面并输入高于我们库存的价值,则会收到以下错误消息:
抱歉,我们没有足够的"
{available_stock_amount}
"有货,以满足您的订单(库存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; }
)。请编辑您的购物车,然后重试。对由此造成的任何不便,我们深表歉意。
我可以使用哪种过滤器来编辑此输出?我不希望它显示(绝对是前端商店的任何地方)实际可用库存量。
我发现这是在函数(check_cart_item_stock)中处理的, [root] - > wp-content-> plugins-> woocommerce-> includes-> class- wc-cart.php 第491行:
(%2$s in stock)
所以我要过滤的是" function PushData($conn, $table, $columns, $values)
{
$column_count = count($columns);
$overwriteArr = array_fill(0, $column_count, '?');
for ($i = 0; $i < sizeof($columns); $i++)
{
$columns[$i] = trim($columns[$i]);
$columns[$i] = '`' . $columns[$i] . '`';
}
$query = "INSERT INTO {$table} (" . implode(',', $columns) . ") VALUES (" . implode(',', $overwriteArr) . ")";
foreach ($values as $value)
{
$value = trim($value);
$value = mysqli_real_escape_string($conn, $value);
$value = htmlentities($value, ENT_QUOTES | ENT_HTML5, $encoding = 'UTF-8');
$value = '"' . $value . '"';
$query = preg_replace('/\?/', $value, $query, 1);
}
$result = mysqli_query($conn, $query);
return $result;
}
&#34;部分。但我无法找到任何过滤器。
答案 0 :(得分:2)
感谢@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 attribut,这反过来意味着任何人仍然可以看到实际的总可用金额(通过简单地使用内置增量(当达到最大值时将停止)或只是输入值的高值,单击更新购物车,您将收到通知,该数量必须等于或小于X(最大值)。 / p>
为了解决这个问题,我在预先存在的“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', '');
这种方式没有最大值,但用户仍会从上面得到错误(如果超过限制):)
即。问题解决了
答案 1 :(得分:1)
显示的此消息位于WC_Cart class source code第493行和第522行...
您可以尝试在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文件中,或者放在任何插件文件中。
这应该可以(未经测试) ...