2017-01-06 5 views
3

Так что я помог кому-то запустить сайт, и они захотели получить скидку на продукт, когда кто-то купил конкретный продукт. Я нашел решение и внедрил его, и он работал при запуске сайта и больше не меняет роль клиентов при покупке продуктов. Я попытался получить поддержку от 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'); 

ответ

3

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-файлов.

+0

Удивительная благодарность за помощь! –

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

  • Нет связанных вопросов^_^