在商店页面上显示 'out of stock' 字符串,但不显示库存数量。

Displaying the 'out of stock' string on shop page but not the stock quantity.

我在我的 WordPress/WooCommerce 站点的 functions.php 文件中使用了这段代码:

function envy_stock_catalog() {
    global $product;
    if ( $product->is_in_stock() ) {
        echo $product->get_stock_quantity() ;
    } else {
        echo '<div class="out-of-stock" >' . __( 'out of stock', 'envy' ) . '</div>';
                add_action('init','remove_loop_button');
    }
}
add_action( 'woocommerce_after_shop_loop_item_title', 'envy_stock_catalog' );

此代码在商店页面上显示 'out of stock' 通知,所有产品都显示如下:


问题是它还会导致产品标题旁边的产品可用库存数量,如下所示:

我不要这个。

我的问题:
我如何更改我的代码以仍然显示 'out of stock' 通知(当产品缺货时)而不是 库存产品可用性 在商店页面上(在 add-to-cart 按钮的左侧)?

提前致谢!

关于您的代码的说明:

  1. 第一部分 (if) 显示库存数量,只要产品有库存(甚至 甚至商店页面)
  2. 第二部分(其他)显示 'out of stock' 字符串并删除添加到购物车按钮(因为产品缺货)。

使用下面的代码,现在我们有:

  • 带有 !is_shop() 的附加 (if) 条件,只要产品有库存且不在商店页面中,它就会显示库存数量。
  • 商店页面的附加(else),退出功能不显示库存数量。
  • 和你未改变的最终 else 条件(就像以前一样)。

所以这是功能齐全的解决方案,如您所愿:

add_action( 'woocommerce_after_shop_loop_item_title', 'envy_stock_catalog' );
function envy_stock_catalog() {
    global $product;
    if ( $product->is_in_stock() ) { // If product is in stock

        if ( !is_shop() ) { // If is NOT Shop page

            // Displays the stock quantity
            echo '<span class="qty">' . $product->get_stock_quantity() . '<span>';
        } else { // If is shop page (and product is in stock)
            return; // Don't display stock quantity (and removes nothing).
        }
    // If product is NOT in stock
    } else {
        // Display 'out of stock' string
        echo '<div class="out-of-stock" >' . __( 'out of stock', 'envy' ) . '</div>';

        // Removes "add to cart" button
        add_action('init','remove_loop_button');
    }
}

如果您只想在单个产品页面显示库存数量,并且 'out of stock' 仅在商店页面显示,这将是您的代码:

add_action( 'woocommerce_after_shop_loop_item_title', 'envy_stock_catalog' );
function envy_stock_catalog() {
    global $product;
    // If product is in stock but is not shop page
    if ( $product->is_in_stock() && !is_shop() ) { 

        // Displays the stock quantity
        echo '<span class="qty">' . $product->get_stock_quantity() . '<span>';
    // If product is NOT in stock and is shop page
    } elseif ( !$product->is_in_stock() && is_shop() ) {
        // Display 'out of stock' string
        echo '<div class="out-of-stock" >' . __( 'out of stock', 'envy' ) . '</div>';

        // Removes "add to cart" button
        add_action('init','remove_loop_button');
    }
    // other cases goes out the function
    return;
}

现在如果你只是不想显示任何库存数量,你的代码将是这样的:

add_action( 'woocommerce_after_shop_loop_item_title', 'envy_stock_catalog' );
function envy_stock_catalog() {
    global $product;
    if ( $product->is_in_stock() ) { // If product is in stock
        return; // Don't display stock quantity (and removes nothing).

    // If product is NOT in stock
    } else {
        // Display 'out of stock' string
        echo '<div class="out-of-stock" >' . __( 'out of stock', 'envy' ) . '</div>';

        // Removes "add to cart" button
        add_action('init','remove_loop_button');
    }
}

在这种情况下,您可以使用此答案中的所有工作技巧:


所有代码都经过测试并且可以完美运行。

代码继续 function.php 您活跃的子主题或主题的文件...