Intereting Posts
Как перенаправить пользователей настольных компьютеров от мобильного сайта с помощью PHP Некорректное числовое число, которое встречается – Невозможно воспроизвести php допускает только буквы, цифры, пробелы и конкретные символы, используя pregmatch данные с кодовым сигналом с запросом Отправить вложение файлов из формы с помощью phpMailer и PHP Отправка SMS через команды php, AT Проверка подлинности Laravel для всех страниц Должен ли я использовать ENT_QUOTES с htmlspecialchars или нет? Шаги для отладки php Curl на окнах Отправка электронной почты с помощью laravel, но не распознающая переменную Как вернуть объект из DQL-запроса? Код работает в Chrome, но не в Firefox Запуск PHP Не удается загрузить динамическую библиотеку php_mongo.dll Как я могу найти все пробелы, исключая те, которые заключены между кавычками? Как получить общее количество друзей, использующих API Facebook и PHP?

Изменение роли пользователя при покупке определенных продуктов при завершении заказа

Поэтому я помог кому-то запустить сайт, и они захотели получить скидку, когда кто-то купил конкретный продукт. Я нашел решение и внедрил его, и он работал при запуске сайта и больше не меняет роль клиентов при покупке продуктов. Я попытался получить поддержку от Woothemes, и они не поддерживают настройку и хотят, чтобы они приобрели расширение в размере $ 129, чтобы справиться с этим.

Кто-нибудь есть решение для этого, которое все еще работает?

Вот мой код:

// Update User on purchase https://gist.github.com/troydean/9322593 function lgbk_add_member( $order_id ) { $order = new WC_Order( $order_id ); $items = $order->get_items(); foreach ( $items as $item ) { $product_name = $item['name']; $product_id = $item['product_id']; $product_variation_id = $item['variation_id']; } if ( $order->user_id > 0 && $product_id == '247' || $order->user_id > 0 && $product_id == '255') { update_user_meta( $order->user_id, 'paying_customer', 1 ); $user = new WP_User( $order->user_id ); // Remove role $user->remove_role( 'customer' ); // Add role $user->add_role( 'author' ); } } add_action( 'woocommerce_order_status_completed', 'lgbk_add_member' ); 

ОБНОВИТЬ

Обычно эта обновленная версия кода должна работать с 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 'to 'author' когда статус заказа установлен на 'completed' , я порекомендую вам попробовать использовать этот крючок уведомлений по электронной почте (если первый фрагмент кода не работает).

Например, здесь я использую woocommerce_email_before_order_table hook, который будет выполнен и запущен с помощью «Заполненного уведомления клиента клиента по электронной почте» с помощью некоторых условий.
(Этот код также совместим со следующим предстоящим крупным обновлением 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-файлов.