Запретить изменение статуса заказа 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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