UPDATE
Обычно это обновленная версия код должен работать с woocommerce_order_status_completed
, а затем вы должны попробовать этот код перед тем.
(Этот код также совместим со следующим предстоящим крупным обновлением WooCommerce 2.7).
Вот код:
add_action('woocommerce_order_status_completed', 'custom_action_on_completed_customer_email_notification');
function custom_action_on_completed_customer_email_notification($order_id) {
// Set HERE your targetted products IDs:
$targetted_products = array(247, 255);
$order = wc_get_order($order_id);
if ($order->get_user_id() > 0) {
foreach ($order->get_items() as $order_item) {
// Here we detect if the a target product is part of this order items
if (in_array($order_item['product_id'], $targetted_products)){
// I think tha this is not really needed as it's set when an order has been paid…
update_user_meta($order->get_user_id(), 'paying_customer', 1); // 1 => true
// Remove all roles and set 'editor' as user role (for current user)
$user = new WP_User($order->get_user_id());
$user->set_role('author');
// Product is found, we break the loop…
break;
}
}
}
}
Но так как я не знаю, как ваш заказ будет изменен на 'completed'
статус, если вы хотите быть уверены, что (во всех возможных случаях), что клиент что будет купить один из ваших 2 конкретных продуктов, будет его роль изменилась от 'customer
"в 'author'
когда статус заказа устанавливается в 'completed'
, я рекомендую вам пытаясь использовать этот крючок уведомлений по электронной почте (если первый фрагмент кода не работает).
Например, здесь я использую woocommerce_email_before_order_table
крюк, который будет выполнен и запущен на «Заполненное уведомление клиента клиента по заказу» с помощью некоторых условий.
(Этот код также совместим со следующим предстоящим крупным обновлением WooCommerce 2.7).
Вот ваш вновь и проверенный код:
add_action('woocommerce_email_before_order_table', 'custom_action_on_completed_customer_email_notification', 10, 4);
function custom_action_on_completed_customer_email_notification($order, $sent_to_admin, $plain_text, $email) {
if('customer_completed_order' == $email->id){
// Set HERE your targetted products IDs:
$targetted_products = array(247, 255);
if ($order->get_user_id() > 0) {
foreach ($order->get_items() as $order_item) {
// Here we detect if the a target product is part of this order items
if (in_array($order_item['product_id'], $targetted_products)){
// I think tha this is not really needed as it's set when an order has been paid…
update_user_meta($order->get_user_id(), 'paying_customer', 1); // 1 => true
// Remove all roles and set 'editor' as user role (for current user)
$user = new WP_User($order->get_user_id());
$user->set_role('author');
// Product is found, we break the loop…
break;
}
}
}
}
}
код идет в function.php файл вашей активной темы ребенка (или темы). Или также в любых плагинах php-файлов.
Удивительная благодарность за помощь! –