第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

檢查變量是否是 WooCommerce 中類對象的實例

檢查變量是否是 WooCommerce 中類對象的實例

PHP
倚天杖 2023-09-08 22:03:16
我正在運行一個功能,檢查用戶之前的訂單中是否有退款的商品,如果有,則在結帳時將積分作為負購物車費用應用。該功能適用于之前下過訂單的用戶,但對新用戶來說會在網站上造成嚴重錯誤。Fatal error: Uncaught Error: Call to a member function get_refunds() on bool in /wp-content/themes/my-theme/refunds.php:20 Stack trace:  #0 /wp-includes/class-wp-hook.php(287): add_last_order_refund_total_at_checkout(Object(WC_Cart))  #1 /wp-includes/class-wp-hook.php(311): WP_Hook->apply_filters('', Array)  #2 /wp-includes/plugin.php(478): WP_Hook->do_action(Array)  #3 /wp-content/plugins/woocommerce/includes/class-wc-cart.php(1714): do_action('woocommerce_car...', Object(WC_Cart))  #4 /wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php(270): WC_Cart->calculate_fees()  #5 /wp-content/plugins/woocommerce/includes/class-wc-cart-totals.php(829): WC_Cart_Totals->get_fees_from_cart()  #6 /wp-content/plugins/woocommerce/includes/class-wc- in /wp-content/themes/my-theme/refunds.php on line 20以下是檢查上一個訂單是否有退款的代碼://Check total of refunded items from last order - add as a fee at checkoutfunction add_last_order_refund_total_at_checkout($cart_object){    if ( is_admin() && ! defined( 'DOING_AJAX' ) )        return;    $user_id = get_current_user_id(); // The current user ID    $customer = new WC_Customer( $user_id );    $last_order = $customer->get_last_order();    $order_id = $last_order;    // Get the WC_Order Object instance (from the order ID)    $order = wc_get_order( $order_id );    // Get the Order refunds (array of refunds)    $order_refunds = $order->get_refunds();    $total_to_refund = $order->get_total_refunded()*(-1);//WIP need to check which items have tax        if (!empty($order_refunds)) WC()->cart->add_fee( 'Refund', $total_to_refund  );  }add_action( 'woocommerce_cart_calculate_fees', 'add_last_order_refund_total_at_checkout', 10, 1 ); 我相信我需要首先檢查用戶是否有任何以前的訂單,否則 get_refund() 會導致錯誤,因為他們沒有任何訂單要檢查?我該如何安全地做到這一點?
查看完整描述

2 回答

?
烙印99

TA貢獻1829條經驗 獲得超13個贊

如果您查看WC_Customer?get_last_order()方法文檔?或源代碼,您將看到:

/*

?* @return WC_Order|false

?*/

這意味著該get_last_order() 方法可以返回:


物體WC_Order_

或false布爾值。

所以你可以在你的代碼中使用:


$last_order = $customer->get_last_order();


if ( ! $last_order )? {

? ?return; // Exit (Not an order)

}

為了避免這個錯誤。


現在,您可以使用is_a()php 條件函數來檢查變量是否來自特定的 Object 類,而不是其他變量,例如:


$last_order = $customer->get_last_order();


if ( ! is_a( $last_order, 'WC_Order' ) ) {

? ?return; // Exit (Not an order)

}


// Your other code…?

或者您可以使用?method_exists()php 條件函數作為WC_Order?get_refunds()方法,以檢查 a 變量是否來自特定的 Object 類而不是其他內容:


$last_order = $customer->get_last_order();


if ( ! method_exists( $last_order, 'get_refunds' ) )? {

? ?return; // Exit (Not an order)

}


// Your other code…

這三種情況工作得很好,避免了錯誤


查看完整回答
反對 回復 2023-09-08
?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

這樣試試吧,已經添加了多個控件,見評論


// Check total of refunded items from last order - add as a fee at checkout

function add_last_order_refund_total_at_checkout( $cart ) {

    if ( is_admin() && ! defined( 'DOING_AJAX' ) )

        return;


    // The current user ID

    $user_id = get_current_user_id();

    

    // User id exists

    if ( $user_id > 0 ) {

        $customer = new WC_Customer( $user_id );

        

        // Get last order

        $last_order = $customer->get_last_order();


        // True

        if ( $last_order ) {


            // Get the order id

            $order_id = $last_order->get_id();

        

            // Order ID exists

            if ( is_numeric( $order_id ) ) {

                // Get the WC_Order Object instance (from the order ID)

                $order = wc_get_order( $order_id );


                // Get the Order refunds (array of refunds)

                $order_refunds = $order->get_refunds();

            

                // NOT empty

                if ( ! empty( $order_refunds) ) {

                    // WIP need to check which items have tax

                    $total_to_refund = $order->get_total_refunded();

                

                    // Add fee

                    $cart->add_fee( 'Refund', $total_to_refund  );

                }

            }

        }

    }

}

add_action( 'woocommerce_cart_calculate_fees', 'add_last_order_refund_total_at_checkout', 10, 1 );



查看完整回答
反對 回復 2023-09-08
  • 2 回答
  • 0 關注
  • 143 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號