WooCommerce:检查产品是否缺货并且不允许延期交货

otp*_*abu 5 php wordpress woocommerce

如何检查产品是否缺货(库存数量为 0)并且不允许延期交货?以下代码由于某种原因不起作用。

add_action('woocommerce_before_add_to_cart_button','show_stock_single');
function show_stock_single() {
  global $product;
  if($product->get_stock_quantity()<1) {
    if($product->backorders_allowed()) echo '<p>Backorders allowed</p>';
    else echo '<p>Backorders not allowed</p>';
  }
  else echo '<p>Available</p>';
}
Run Code Online (Sandbox Code Playgroud)

对于允许延期交货的产品,它显示“允许延期交货”,但如果不允许延期交货,则不显示任何内容。为什么?

小智 11

每当我得到一个没有按照我认为应该做的 if 语句时,我尝试的第一件事就是反转它,所以试一试......

if($product->get_stock_quantity()>0) {
    echo '<p>Available</p>';
} else {
    if($product->backorders_allowed()) { 
        echo '<p>Backorders allowed</p>';
    } else {
        echo '<p>Backorders not allowed</p>';
    }
}
Run Code Online (Sandbox Code Playgroud)

- 我还要确保你用 {...} 括号括住了各种 if 位。我知道 PHP 应该允许更宽松的单行 ifs 要求,但这可能是原因!


Syn*_*ror 5

当我对某个代码有问题时,我总是检查每个变量是否返回正确的值。

在这种情况下,我将每个部分分开以查看可能失败的内容,并且我更改了 Hook,以查看没有任何内容会导致某些冲突。

对不起,如果代码太长了。我在每个部分都进行了评论,以帮助理解每个部分的作用。我还添加了每个结果的图像。

案例 1 https://i.stack.imgur.com/rmu5m.jpg

案例 2 https://i.stack.imgur.com/Zxnrt.jpg

案例 3 https://i.stack.imgur.com/v8Tzc.jpg

add_action('woocommerce_single_product_summary','show_stock_single',5);
function show_stock_single() {
  global $product;
  $StockQ=$product->get_stock_quantity();

  if ($StockQ>=1)//Stock is Available
  {
    echo "<p>Available</p>";
  }
  elseif($StockQ<1)//Product is Out of Stock
  {
    echo "<p>Out of Stock</p>";
    if ($product->backorders_allowed())//Product is out of stock AND allow backorders
    {
        echo "<p>Backorder Allowed</p>";
    }
    else//Product is out of stock AND DO NOT allow backorders
    {
        echo "<p>Backorder NOT Allowed</p>";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

注意:我使用的主题是 Storefront 以避免任何插件/模板冲突