代码之家  ›  专栏  ›  技术社区  ›  axelra82

从WooCommerce购物车错误消息中删除库存数量

  •  5
  • axelra82  · 技术社区  · 7 年前

    “从不显示剩余库存量” .

    但是,如果客户将产品广告到购物车,继续购物车或结帐页面,并输入高于我们库存的值,他们会收到以下错误消息:

    {product_name} {available_stock_amount} 库存)。请编辑您的购物车并重试。带来不便敬请谅解。

    第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) “部分。但我找不到任何过滤器。

    2 回复  |  直到 7 年前
        1
  •  2
  •   LoicTheAztec    7 年前

    显示的信息位于 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;
    }
    

    这应该行得通 (未列出)

        2
  •  1
  •   axelra82    7 年前

    谢谢@LoicTheAztec的回复,但我毕竟找到了一个过滤器,

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

    注意! 属性,这反过来意味着任何人仍然可以看到实际的总可用金额(通过简单地使用内置增量(达到最大值时将停止)或只输入一个值的上限,单击更新购物车,您将收到一个通知,金额必须等于或小于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', '');
    

    一、 e.问题已解决