首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用woocommerce_get_availability钩子时的几个问题

使用woocommerce_get_availability钩子时的几个问题
EN

Stack Overflow用户
提问于 2021-09-09 10:59:36
回答 2查看 529关注 0票数 1

我试图在单一产品页面上显示缺货商品的“缺货信息”。

我的functions.php中有这段代码

代码语言:javascript
复制
function stock_catalog() {
    global $product;
    if (number_format($product->stock, 0, '', '') <= 0) {
        echo '<p class="mb-2"> ' . __('** Sorry currently out of stock **', 'text- 
   domain') . '</p>';
    }
}
add_action('woocommerce_get_availability', 'stock_catalog');

我得到以下错误:

注意:股票被错误地调用。不应直接访问产品属性。回溯:要求(‘WP-blog-Header.php’),require_once('wp-includes/template-loader.php'),include('/plugins/woocommerce/templates/single-product.php'),wc_get_template_part,load_template,require('/themes/mytheme/woocommerce/content-single-product.php'),do_action('woocommerce_single_product_summary'),WP_Hook->do_action,WP_Hook->apply_filters,woocommerce_template_single_add_to_cart,include('/plugins/woocommerce/templates/single-product/add-to-cart/simple.php'),_ do_action('woocommerce_simple_add_to_cart'),WP_Hook->do_action,WP_Hook->apply_filters,woocommerce_simple_add_to_cart,wc_get_template,wc_get_stock_html,WC_Product>get_availability,apply_filters('woocommerce_get_availability'),WP_Hook->apply_filters,stock_catalog,WC_抽象_Legacy_Product>_get,关于/homepages/17/d825330075/htdocs/mytheme/wp-includes/functions.php第5313行的更多信息,请参见WordPress中的调试。

有什么办法解决这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-09 11:09:52

需要使用"get_stock_quantity“方法

代码语言:javascript
复制
function stock_catalog($availability, $product) {

    if ( $product->managing_stock() && $product->get_stock_quantity() <= 0) {
        $availability['availability'] = __('** Sorry currently out of stock **', 'text- 
   domain');
    }

    return $availability;
}
add_filter('woocommerce_get_availability', 'stock_catalog', 10, 2);

更多细节https://woocommerce.github.io/code-reference/classes/WC-Product.html#method_get_stock_quantity

票数 -1
EN

Stack Overflow用户

发布于 2021-09-09 11:13:03

您的代码包含的错误不是1,而是几个错误,

  • woocommerce_get_availability不是一个动作,但是过滤器hook
  • number_format()在这里不适用于all
  • $product->stock 需要替换为 $product->get_stock_quantity()
  • managing_stock()必须为真,否则不可能设置/存储产品库存quantity
  • echo不应用于过滤器挂钩,而应该使用返回
  • 将输出分配给$availability
  • $product 作为参数传递给函数,因此,不需要使用全局变量

所以你得到了:

代码语言:javascript
复制
// Change stock text
function filter_woocommerce_get_availability( $availability, $product ) {       
    // Managing stock is activated
    if ( $product->managing_stock() ) {
        // Stock quantity
        $stock_quantity = $product->get_stock_quantity();
        
        // Stock quantity is less than or equal to 0
        if ( $stock_quantity <= 0 ) {
            $availability['availability'] = __( 'Sorry currently out of stock', 'woocommerce' );
        }
    }

    return $availability;
}
add_filter( 'woocommerce_get_availability', 'filter_woocommerce_get_availability', 10, 2 );
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69116992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档