WooCommerce在订单状态更改时出现严重错误



我使用此代码添加管理操作来更改批量订单状态。我有自定义的构建状态与名称">wc-to-order"。不幸的是,当使用Woo批量操作代码时,我得到了错误。有人能帮我解决这个问题吗?

这是代码:

add_action( 'admin_action_wc-to-order', 'add_new_order_status_wc_on_hold' ); // admin_action_{action name}
function add_new_order_status_wc_on_hold() {

// if an array with order IDs is not presented, exit the function
if( !isset( $_REQUEST['post'] ) && !is_array( $_REQUEST['post'] ) )
return;

foreach( $_REQUEST['post'] as $order_id ) {

$order = new WC_Order( $order_id );
$order_note = 'That's what happened by bulk edit:';
$order->update_status( 'wc-to-order', $order_note, true ); 

}


$location = add_query_arg( array(
'post_type' => 'shop_order',
'wc-to-order' => 1, // markED_awaiting_shipment=1 is just the $_GET variable for notices
'changed' => count( $_REQUEST['post'] ), // number of changed orders
'ids' => join( $_REQUEST['post'], ',' ),
'post_status' => 'all'
), 'edit.php' );

wp_redirect( admin_url( $location ) );
exit;

}

我得到这个在调试日志

PHP Fatal error:  Uncaught TypeError: join(): Argument #2 ($array) must be of type ?array, string given in /public_html/sitename/wp-content/themes/themename/functions.php:648

从日志中可以看出$_REQUEST['post']可能不是数组。在下面的代码中,我们首先检查它是否是一个数组。如果不是,则将其强制转换为array。

add_action( 'admin_action_wc-to-order', 'add_new_order_status_wc_on_hold' ); // admin_action_{action name}
function add_new_order_status_wc_on_hold() {
// if an array with order IDs is not presented, exit the function
if( !isset( $_REQUEST['post'] ) ) {
return;
}

//check if it is an array. If not, cast it as array
$orders_array = is_array($_REQUEST['post']) ? $_REQUEST['post'] : array($_REQUEST['post']);
foreach( $orders_array as $order_id ) {

$order = new WC_Order( $order_id );
$order_note = 'That's what happened by bulk edit:';
$order->update_status( 'wc-to-order', $order_note, true ); 

}


$location = add_query_arg( array(
'post_type' => 'shop_order',
'wc-to-order' => 1, // markED_awaiting_shipment=1 is just the $_GET variable for notices
'changed' => count( $orders_array ), // number of changed orders
'ids' => join( $orders_array, ',' ),
'post_status' => 'all'
), 'edit.php' );

wp_redirect( admin_url( $location ) );
exit;

}

这样可以确保数组始终提供给join函数。

相关内容

最新更新