2017-01-08 4 views
0

Мне нужно сделать действие, когда заказ будет завершен.woocommerce_payment_complete не увольняется по порядку маркировки

Я попытался это:

function mysite_woocommerce_payment_complete($order_id) { 
error_log("callback fired"); 
} 
add_action('woocommerce_payment_complete', 'mysite_woocommerce_payment_complete'); 

Но когда я использую флажок, чтобы пометить заказ как заполнить здесь в окне администратора заказов, mark order complete

... крючок не срабатывает. Я тоже пробовал woocommerce_order_status_changed, он делает действие, когда я размещаю заказ, но ничего не делает, когда я отмечаю завершенный заказ.

Но когда я отмечаю, что заказ завершен, я получаю электронное письмо о его заполнении.

Спасибо!

Edit: Я тоже пытался woocommerce_order_status_changed, таким образом:

function mysite_woocommerce_payment_complete($order_id, $old_status, $new_status) { 
    error_log("$old_status/$new_status \n"); 
} 
add_action('woocommerce_order_status_changed', 'mysite_woocommerce_payment_complete', 99, 3); 

но пожары на покупку (я выбрал банковский перевод) и показывает: «ожидание/на удержании», но не так - см. edi2 не срабатывает при ручном обновлении бэкэнд от «на удержании» до «завершено». Ни с помощью галочки, ни в интерфейсе одного порядка.

edit2 woocommerce_order_status_changed и woocommerce_order_status_completed работы, это только мое outputed тестирование "ошибка" в debug.log, не error_log по какой-то причине. woocommerce_payment_complete, который я использовал ранее, не относится к таким методам, как банковский перевод, поэтому это не сработало. Благодаря @helgatheviking для быстрого и правильного ответа

ответ

2

Ну завершенная электронный заказ запускается следующим:

// Triggers for this email 
add_action('woocommerce_order_status_completed_notification', array($this, 'trigger')); 

как видно here в источнике.

Все «транзакционные действия по электронной почте» (то есть: действия, которые вызывают отправку электронной почты) получают крючок _notification в дополнение к обычным крючкам, см. here.

woocommerce_order_status_completed_notification Таким образом, дополнительный крючок срабатывает на woocommerce_order_status_completed крючок еслиwoocommerce_order_status_completed находится в woocommerce_email_actions массива, который это по умолчанию. Для того, чтобы избежать любой удивляйтесь из писем, я рекомендую использовать woocommerce_order_status_completed крюк, который стрелял в любое время есть изменение статуса заказа, в том числе внутри администратора, увидеть этот пример:

function mysite_woocommerce_payment_complete($order_id) { 
    error_log("callback fired"); 
} 
add_action('woocommerce_order_status_completed', 'mysite_woocommerce_payment_complete'); 
+0

Вы правы, что это ленивый ответ, просто указывая на то, что я считаю подходящим. Я попытаюсь придумать пример базового функционирования. – helgatheviking

+1

Я * сделал * просто протестировал его на WC2.6.11, и эта функция была запущена при полном сохранении порядка в таблице обзора заказов и в окне «Редактировать индивидуальный заказ». Я просмотрел исходный код для 2.6.11 и ['woocommerce_order_status_completed'] (https://github.com/woocommerce/woocommerce/blob/2.6.11/includes/abstracts/abstract-wc-order.php#L2390) будет только не запускается, если у заказа нет идентификатора, старый статус равен новому статусу, или 'wp_update_post()' терпит неудачу. – helgatheviking

+0

Попытался заменить как 'woocommerce_order_status_completed', так и' woocommerce_order_status_completed_notification' без успеха, также работает WC2.6.11:/ – Fanky

Смежные вопросы