Woocommerce支付网关:已知订单ID无法获取产品ID的问题
错误原因
你代码里的$orderid = $order->get_id();得到的是整数类型的订单ID,而get_items()是WC_Order对象专属方法,直接给整数调用这个方法必然报错,和循环位置无关。
修正后的代码
情况1:已持有WC_Order对象(代码中已有$order变量)
直接用$order对象调用get_items()即可,无需先取ID:
foreach( $order->get_items() as $order_item ) { $product = $order_item->get_product(); if ( $product ) { // 确保产品对象有效 $product_id = $product->get_id(); echo $product_id; } }
情况2:仅拿到订单ID(比如从钩子参数获取到的是ID,如错误栈里的receipt_page(5648))
需先通过订单ID获取WC_Order对象,再调用方法:
$order_id = 5648; // 替换为实际订单ID变量 $order = wc_get_order( $order_id ); if ( $order ) { // 确保订单对象有效 foreach( $order->get_items() as $order_item ) { $product = $order_item->get_product(); if ( $product ) { $product_id = $product->get_id(); echo $product_id; } } }
完整错误信息(中文翻译)
致命错误:未捕获错误:在整数上调用成员函数get_items(),位于/home/customer/www/xyz.com/public_html/site/wp-content/plugins/woocommerce-gateway-nab-dp/woocommerce-nab-dp.php:946
调用栈:
#0 /home/customer/www/xyz.com/public_html/site/wp-includes/class-wp-hook.php(308): WC_Gateway_NAB_Direct_Post->receipt_page(5648)
#1 /home/customer/www/xyz.com/public_html/site/wp-includes/class-wp-hook.php(332): WP_Hook->apply_filters('', Array)
#2 /home/customer/www/xyz.com/public_html/site/wp-includes/plugin.php(517): WP_Hook->do_action(Array)
#3 /home/customer/www/xyz.com/public_html/site/wp-content/themes/STAR-child/woocommerce/checkout/order-receipt.php(44): do_action('woocommerce_rec...', 5648)
#4 /home/customer/www/xyz.com/public_html/site/wp-content/plugins/woocommerce/includes/wc-core-functions.php(345): include('/home/customer/...')
#5 /home/customer/www/...位于/home/customer/www/xyz.com/public_html/site/wp-content/plugins/woocommerce-gateway-nab-dp/woocommerce-nab-dp.php第946行
内容的提问来源于stack exchange,提问作者Adam Fletcher

