我当前的代码即使没有 if 语句,仍然将所有“暂停”订单的状态更改为“customstatus”。即使它应该只在订单包含特定产品 ID 时更改。此代码还将自定义元添加到用户。不知道我做错了什么。任何帮助将不胜感激。
add_action('woocommerce_order_status_changed', 'ts_auto_complete_business_cards');
function ts_auto_complete_business_cards($order_id) {
if ( ! $order_id ) {
return;
}
global $product;
$order = wc_get_order( $order_id );
if ($order->data['status']=='on-hold') {
$items=$order->get_items();
foreach ( $items as $item ) {
$product_id = $item->get_product_id();
if ($product_id!=="193007")
{
$current_user = wp_get_current_user();
$current_user_id = get_current_user_id();
$order->update_status( 'customstatus' );
update_user_meta( $current_user_id, 'custommeta', '2' );
}
}
}
}
答案 0 :(得分:2)
您的代码中有一些错误和遗漏。请尝试以下操作:
add_action('woocommerce_order_status_on-hold', 'auto_complete_business_cards', 10, 2 );
function auto_complete_business_cards( $order_id, $order ) {
$product_id = 193007;
$found = false;
// loop though order status
foreach ( $order->get_items() as $item ) {
if ( $item->get_product_id() !== $product_id) {
$found = true;
break;
}
}
if ( ! $found ) {
$order->update_status( 'customstatus' );
update_user_meta( $order->get_user_id(), 'custommeta', '2' );
}
}
或者还有这个:
add_action('woocommerce_order_status_changed', 'auto_complete_business_cards', 10 , 4 );
function auto_complete_business_cards( $order_id, $order ) {
if ($new_status === 'on-hold' ) {
$product_id = 193007;
$found = false;
// loop though order status
foreach ( $order->get_items() as $item ) {
if ( $item->get_product_id() !== $product_id) {
$found = true;
break;
}
}
if ( ! $found ) {
$order->update_status( 'customstatus' );
update_user_meta( $order->get_user_id(), 'custommeta', '2' );
}
}
}
代码位于活动子主题(或活动主题)的functions.php 文件中。它应该会更好地工作。