WooCommerce 如何检查产品是否有货

WooCommerce how to check if the product is in stock

我认为有一个很简单的解决方案:

在 WooCommerce 中,我想将我的交货时间过滤器应用于单个产品,但前提是它是 available/in stock。我在检查产品库存时遇到错误。

function filter_woocommerce_germanized_delivery_time_html( $str_replace, $html ) { 
    
    global $product;
if( $product->is_in_stock() ) {

        echo '<p class="wc-gzd-additional-info delivery-time-info">';
        echo $str_replace;
        echo '</p>'; 
    echo '<p class="wc-gzd-additional-info"><a href="https://xyz.at/info/lieferzeiten/" target="_blank"><i class="fas fa-shipping-fast"></i> EU-Lieferzeiten</a></p></span>';
    
}
    
}   
         
// add the filter 
add_filter( 'woocommerce_germanized_delivery_time_html', 'filter_woocommerce_germanized_delivery_time_html', 10, 2 );

我也试过:

if($product->get_stock_quantity()>0) 

但类似的错误如:

"Uncaught Error: Call to a member function is_in_stock() on null.."

感谢您的帮助!

此致, 菲利克斯

错误告诉您您在 null 值上使用了函数,这意味着它找不到 $product 变量。

不确定此 woocommerce_germanized_delivery_time_html 过滤器挂钩来自何处以及您在何处使用 global $product,但您可以使用以下代码段来获取产品。

global $post;
$product = wc_get_product($post->ID);

现在你的整个代码应该是这样的:

add_filter( 'woocommerce_germanized_delivery_time_html', 'filter_woocommerce_germanized_delivery_time_html', 10, 2 );

function filter_woocommerce_germanized_delivery_time_html($str_replace, $html)
{

    global $post;

    $product = wc_get_product($post->ID);

    if ($product->is_in_stock()) {

        echo '<p class="wc-gzd-additional-info delivery-time-info">';
        echo $str_replace;
        echo '</p>';
        echo '<p class="wc-gzd-additional-info">';
        echo '<a href="https://xyz.at/info/lieferzeiten/" target="_blank"><i class="fas fa-shipping-fast"></i> EU-Lieferzeiten</a>';
        echo '</p>';
    } else{
       return $str_replace;
    }

}

或者您可以这样获取库存数量:

add_filter( 'woocommerce_germanized_delivery_time_html', 'filter_woocommerce_germanized_delivery_time_html', 10, 2 );

function filter_woocommerce_germanized_delivery_time_html($str_replace, $html)
{

    global $post;

    $stock_quantity = get_post_meta($post->ID, '_stock', true);

    if ($stock_quantity > 0) {

        echo '<p class="wc-gzd-additional-info delivery-time-info">';
        echo $str_replace;
        echo '</p>';
        echo '<p class="wc-gzd-additional-info">';
        echo '<a href="https://xyz.at/info/lieferzeiten/" target="_blank"><i class="fas fa-shipping-fast"></i> EU-Lieferzeiten</a>';
        echo '</p>';
    } else {
       return $str_replace;
    }

}

如果你能让它工作,请告诉我!