Запретить изменение статуса заказа WooCommerce с/на определенные статусыPhp

Кемеровские программисты php общаются здесь
Anonymous
Запретить изменение статуса заказа WooCommerce с/на определенные статусы

Сообщение Anonymous »

Здравствуйте, я пытаюсь создать функцию в плагинах mu, чтобы запретить определенным пользователям менять статус заказа с определенных статусов заказа на определенные статусы заказа.
Я искал везде, и я пробовал много разных способов, но, похоже, ничего не работает.
На самом деле функция выполняется с использованием перехватчика действия 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;
}
но переменная $changes всегда представляет собой пустой массив.
Я пытался использовать 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

Вернуться в «Php»