当前位置: 首页 > 知识库问答 >
问题:

WooCommerce未捕获错误:在null上调用成员函数get_stock_quantity()

蒙才
2023-03-14

我收到WordPress发来的关于致命错误的消息。它与WPML字符串翻译插件后端中的特定页面相关。我认为有一个特别的翻译:

访问发现错误的页面(xxxxxxxx/wp admin/admin.php?page=wpml translation management/menu/translations-queue.php

它还说

错误详细信息===========在文件/nas/content/live/mywebsite/wp content/themes/babasouk/functions.php的第259行中导致了类型为E_Error的错误。错误消息:未捕获错误:在/nas/content/live/mywebsite/wp content/themes/myteme/functions.php:259堆栈跟踪:#0/nas/content/live/mywebsite/wp includes/class wp hook.php(303):bbloomer\u自定义获取可用性\u文本('100 in stock',null)

#1 /nas/content/live/mywebsite/wp-includes/plugin.php(189):WP_Hook-

#2/nas/content/live/mywebsite/wp content/plugins/woocommerce/includes/abstracts/abstract wc product.php(2082):应用过滤器('woocommerce_get…','100 in stock',对象(wc_product_Variation))

#3/nas/content/live/mywebsite/wp content/plugins/woocommerce/includes/abstracts/abstract wc product.php(2058):wc_产品-

#4 /nas/content/live/mywebsite/wp-content/plugins/woocommerce/includes/wc-template-functions.php(3512):WC_Product-

#5/nas/content/live/mywebsite/wp content/plugins/woocommerce/includes/class wc product variable.php(367):wc_get_stock_html(Object(W

在我的PHP中,我echo get_stock_quantity()并返回一个值。我还尝试了$product的echo并返回了所有内容。我禁用了它,因为它的信息太多。网站在这里。https://babasoukstage.wpengine.com/shop/product-category/decor/moroccan-kilim-pillows/

问题是否可能是我声明要转换的“”空值__(“巴巴索克”);

我的PHP是

function bbloomer_show_stock_shop() {
  global $product;
  echo wc_get_stock_html( $product );
}
// CHANGE STOCK MESSAGES
add_filter( 'woocommerce_get_availability_text', 'bbloomer_custom_get_availability_text', 99, 2 );

function bbloomer_custom_get_availability_text( $availability, $product ) {
  global $product; // TO MAKE CATEGORY AVAILABLE
  $stock = $product->get_stock_quantity(); //THIS IS LINE 259
    //echo $product; does echo all product details when active
    echo $stock;//test to see if stock quantity returned. Does display on category and product pages.
  // OUTSIDE THE CATEGORY EXCLUSION SO THEY APPLY TO ALL 
  if ( !$product->is_in_stock() )$availability = __( 'Sorry, I am sold out!', 'babasouk' ); //OUT OF STOCK MESSAGE
    if ( $product->is_in_stock() && ( $stock >= 2 ) )$availability = __( '', 'babasouk' ); //NO MESSAGE IF STOCK OVER 1
  //EXCLUDE THESE CATEGORIES FOR 1 ITEM LEFT MESSAGE. IF THESE CATEGORIES MESSAGE IS BLANK.
  if ( has_term( array( 'ORIGINAL ARTWORKS', 'OEUVRES ORIGINALES' ), 'product_cat' ) ) {
    if ( $product->is_in_stock() && ( $stock == 1 ) )$availability = __( '', 'babasouk' ); //
  } //IF NOT EXCLUDED CATEGORIES MESSAGE IS 'Only 1 Available!'
  else if ( $product->is_in_stock() && ( $stock == 1 ) )$availability = __( 'Only 1 Available!', 'babasouk' );
  return $availability;
}

共有1个答案

司空劲
2023-03-14

您的代码中有一个错误,日志也会告诉您这个问题。由于您位于functions.php文件中,因此没有可用的global$product。因此,您将得到一个空指针,因为您将不使用任何内容覆盖可用的产品变量。当我查看您从中获取的页面上的代码片段时,也没有使用global$product——只是想知道。。。

当您检查钩子时,您可以看到有产品已经传递给函数。只要使用它:

add_filter( 'woocommerce_get_availability_text', 'bbloomer_custom_get_availability_text', 99, 2 );
function bbloomer_custom_get_availability_text( $availability, WC_Product $product ) {
    $stock = $product->get_stock_quantity(); //THIS IS LINE 259
    //echo $product; does echo all product details when active
    error_log( $stock );//test to see if stock quantity returned. Does display on category and product pages.
    // OUTSIDE THE CATEGORY EXCLUSION SO THEY APPLY TO ALL
    if ( $product->is_in_stock() ) {
        if ( $stock > 1 ) {
            $availability = __( '', 'babasouk' );
        }

        if ( $stock === 1 ) {
            if ( has_term( [ 'ORIGINAL ARTWORKS', 'OEUVRES ORIGINALES' ], 'product_cat', $product ) ) {
                $availability = __( '', 'babasouk' );
            } else {
                $availability = __( 'Only 1 Available!', 'babasouk' );
            }
        }
    } else {
        $availability = __( 'Sorry, I am sold out!', 'babasouk' );
    }

    return $availability;
}

我也对你的代码做了一些改进。最后,你的函数对我来说没有多大意义,但没关系——只是为了向你展示一种更好的嵌套方式和速度改进。如果只调用一次函数,而不是多次调用,则可以提高页面速度。

 类似资料:
  • 我正在尝试使用PHP在WooCommerce中创建一个自定义优惠券代码,它基本上会将购物车中标签名为“main”的每件商品的价格折扣到10。它通过计算购物车中标记为“main”的商品数量,然后计算每个商品的总价,并由此计算$折扣变量中所需的折扣。请参见下面的代码: 当我尝试激活此代码时,会收到以下错误消息: 您试图保存的代码段在第4行产生了致命错误: 未捕获错误:在/homepages/9/d39

  • 我们一直很好地使用WooCommerce订阅,但是当从用户的“我的帐户”部分查看订单时,它开始引起问题,打开WP_DEBUG显示如下: 未捕获的错误:在/wp-content/plugins/woocommerce-subscriptions/includes/wcs-user-functions.php:381中调用bool中的成员函数get_user_id() 第381行是: 鉴于这是一个官方

  • 这是三个文件 我得到一个错误“Fatal error:Uncattle error:Call to a member function prepare()on null”。这段代码运行在我的localhost上没有问题,但是当它上传到服务器时,我就出现了这个问题。我在本地使用PHP8和xammp软件。我是三年级学生,请帮帮我。 文件database.php: } 文件admin.php

  • 问题内容: 我正在尝试检查注册中是否已使用电子邮件。当我在学校工作时,它运行良好,但现在突然显示出一个错误: 致命错误:在null上调用成员函数prepare() 我用这个包括 在这里 问题答案: 编辑:( 我想通了)。 我终于弄清楚了为什么您的代码无法正常工作,而我原来的答案已不再适用,我已将其剔除掉。 连接不起作用的原因是因为您从连接参数中省略了常量。 即使您可能没有设置密码,也仍然需要将其作

  • 问题内容: 我不确定这里出了什么问题。我只是在线上学习教程,并且弹出了这些错误。 我收到以下错误 错误 码 问题答案: 首先,您在函数外声明了$ db。如果要在函数内部使用它,则应将其放在函数代码的开头: 我猜,当你写的时候: 您真正想要的是:

  • 问题内容: 我正在尝试访问类别及其内容的列表。我有一堂课叫做分类。我不断收到此错误。奇怪的是,到目前为止,我已经在另外两个地方使用了相同的完全相同的代码,没有任何问题。我在这里所做的只是重用代码并更改所有变量。 这是我班上的代码: 这是我尝试调用的代码: 问题答案: 看来您的变量未初始化。在您上传的代码中,我看不到它的初始化位置。 确保在调用类方法之前在中创建了一个新的PDO对象。(由于应在Cat