【问题标题】:Avoid error "call to a member function get_cart()…" in WooCommerce function避免在 WooCommerce 函数中出现错误“调用成员函数 get_cart()…”
【发布时间】:2020-10-19 10:03:30
【问题描述】:

在以前确实有效的代码上收到错误,但现在它阻止我在 wordpress 中编辑页面(当我尝试编辑页面时,它表明存在严重错误)。

下面的代码基本上会根据相关产品是否在购物车中来更改添加到购物车按钮的文本。

下面的代码和下面的错误异常:

function woocommerce_custom_add_to_cart_text($add_to_cart_text, $product ) {
    global $woocommerce;
    // Get cart
    $cart_items = $woocommerce->cart->get_cart();

    foreach ( $cart_items as $cart_item_key => $cart_item ) {
        // Get product id in cart
        $_product_id = $cart_item['product_id'];
 
        if ( $product->get_id() == $_product_id ) {
            $add_to_cart_text = 'Already in cart';
        }
    }

    return $add_to_cart_text;
  
}
add_filter( 'woocommerce_product_add_to_cart_text', 'woocommerce_custom_add_to_cart_text', 10, 2 );

错误异常:

An error of type E_ERROR was caused in line 3 of the file /home4/metisonl/public_html/staging/4326/wp-content/plugins/code-snippets/php/snippet-ops.php(446) : eval()'d code. Error message: Uncaught Error: Call to a member function get_cart() on null in /home4/metisonl/public_html/staging/4326/wp-content/plugins/code-snippets/php/snippet-ops.php(446) : eval()'d code:3
Stack trace:
#0 /home4/metisonl/public_html/staging/4326/wp-includes/class-wp-hook.php(287): woocommerce_custom_add_to_cart_text('Add to cart', Object(WC_Product_Simple))
#1 /home4/metisonl/public_html/staging/4326/wp-includes/plugin.php(206): WP_Hook->apply_filters('Add to cart', Array)
#2 /home4/metisonl/public_html/staging/4326/wp-content/plugins/woocommerce/includes/class-wc-product-simple.php(62): apply_filters('woocommerce_pro...', 'Add to cart', Object(WC_Product_Simple))
#3 /home4/metisonl/public_html/staging/4326/wp-content/plugins/woo-gutenberg-products-block/src/BlockTypes/AbstractProductGrid.php(473): WC_Product_Simple->add_to_cart_text()
#4 /home4/metisonl/public_html/staging/4326/wp-content/plugins/woo-gutenberg-products-block/src/BlockTypes/AbstractProductGrid.php(446): Automattic\WooCommerce\Blocks\BlockTypes\Abstra

【问题讨论】:

    标签: php wordpress woocommerce product cart


    【解决方案1】:

    已更新 ...您需要检查购物车对象是否存在且购物车不为空,因此请尝试以下操作以避免此类错误:

    add_filter( 'woocommerce_product_add_to_cart_text', 'filter_product_add_to_cart_text', 10, 2 );
    function filter_product_add_to_cart_text( $add_to_cart_text, $product ) {
        if ( ! WC()->cart && WC()->cart->is_empty() ) 
            return $add_to_cart_text;
    
        // Loop through cart items
        foreach ( WC()->cart->get_cart() as $cart_item ) {
            // Get product id in cart
            $_product_id = $cart_item['product_id'];
     
            if ( $product->get_id() == $_product_id ) {
                return __('Already in cart');
            }
        }
        return $add_to_cart_text;
    }
    

    代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并且可以工作。

    【讨论】:

    • 哇,答案很快。我很抱歉,因为我正在学习如何开发和处理我不习惯的 wordpress 错误。加上 10 多年没有做过 php。似乎它奏效了。顺便说一句,您对我上一个问题的回答。我刚刚注意到一些事情。简码,当我在页面 [order_table_summary] 上使用“简码”组件时,它不会输出表格。看起来很奇怪,因为我看不出代码有什么问题(我使用 add sn-ps 插件)
    • 我截个图给你看看
    • 我在另一个问题中提供了屏幕截图,以显示我如何调用短代码:stackoverflow.com/questions/64423037/…
    • 如果 !WC()->cart 为真,函数 WC()->cart->is_empty() 是否存在?
    • 在我看来需要进行两项检查:is_null( WC()->cart ) 后跟 WC()->cart->is_empty()。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多