Я искал везде, и я пробовал много разных способов, но, похоже, ничего не работает.
На самом деле функция выполняется с использованием перехватчика действия woocommerce_order_status_changed. Дело в том, что этот крючок запускается после того, как статус заказа уже был изменен, что вызывает бесконечный цикл.
Самый полезный крючок, который я нашел, кажется, woocommerce_before_order_object_save. p>
Я нашел "Добавьте дополнительный аргумент, чтобы предотвратить вызов woocommerce_order_status_changed", полезную соответствующую тему на WooCommerce Github.
Я попробовал использовать Решение для фрагмента кода @kloon:
Код: Выделить всё
add_filter( 'woocommerce_before_order_object_save', 'prevent_order_status_change', 10, 2 );
function prevent_order_status_change( $order, $data_store ) {
$changes = $order->get_changes();
if ( isset( $changes['status'] ) ) {
$data = $order->get_data();
$from_status = $data['status'];
$to_status = $changes['status'];
// Do your logic here and update statuses with CRUD eg $order->set_status( 'completed' );
// Be sure to return the order object
}
return $order;
}
Я пытался использовать wp_insert_post_data Wordpress, но когда Я установил:
Код: Выделить всё
$data['post_status'] = "some status";
Это код, который я хотел бы запустить:< /p>
Код: Выделить всё
function($data){
if($data['order_status'] == 'comlpeted' && $data['new_order_status'] == 'proccessing'){
// prevent the order status from being changed
$data['new_order_status'] = $data['order_status'];
}
few more if conditions...
return $data;
}
Подробнее здесь: https://stackoverflow.com/questions/664 ... c-statuses