Добавьте роль пользователя с помощью хуков статуса перехода заказа Woocommerce - PullRequest
0 голосов
/ 25 февраля 2019

Мне нужно добавить новую роль для моего недавно зарегистрированного пользователя (при покупке любого из моих четырех продуктов по подписке).До сих пор каждый недавно зарегистрированный пользователь (те, кто покупает продукт по подписке) получает роль подписчика.Хотя я хочу, чтобы они были подписчиками + рекламодателями, если они купят какой-либо из моих 4 целевых продуктов подписки.

Я пытался использовать woocommerce_order_status_completed, woocommerce_order_status_processing и woocommerce_order_status_changed хуки, но ни один из них не работаетс моим кодом.

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

До сих пор я использовал этот код.

add_action( 'woocommerce_order_status_completed', 'so_29647785_convert_customer_role' );   
function so_29647785_convert_customer_role( $order_id ) {

    $order = new WC_Order( $order_id );
    if ( $order->user_id > 0 ) {
        foreach ( $order->get_items() as $order_item ) {
            if( 4008 == $order_item[ 'product_id' ] ) {
                $user = new WP_User( $order->user_id );

                // Add new role
                $user->add_role( 'advertiser' );
            }
        }
    }
}

Я будуСпасибо за любую помощь или отслеживание.


Я также пробовал этот код, и он полезен при создании пользователя с обеими ролями подписчик + рекламодатель, но я не могу сделать это в моем случае.Потому что мне нужно, чтобы пользователи были зарегистрированы в обеих ролях подписчик + рекламодатель, только если они купят четыре моих целевых продукта подписки.Хотя этот код добавляет подписчика + рекламодателя каждому новому пользователю независимо от того, какой продукт он выберет.

add_filter('woocommerce_new_customer_data', 'bbloomer_assign_custom_role', 10, 1);

function bbloomer_assign_custom_role($args) {
  $args['role'] = 'advertiser';
  return $args;
}

Любая помощь будет высоко оценена!

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Начиная с Woocommerce 3, ваш код устарел, и в вашем коде есть некоторые ошибки и ошибки, например $order_item['product_id'] не будет работать ... Попробуйте вместо этого:

add_action( 'woocommerce_order_status_processing', 'order_status_change_add_user_role', 10, 2 );
add_action( 'woocommerce_order_status_completed', 'order_status_change_add_user_role', 10, 2 );
function order_status_change_add_user_role( $order_id, $order ) {
    if ( $order->get_user_id() > 0 ) {
        $user = $order->get_user(); // Get an instance of the WP_User object

        foreach ( $order->get_items() as $item ) {
            // Check that user role is not set yet and that is matching with a product ID
            if( 4008 == $item->get_product_id() && ! in_array('advertiser', $user->roles) ) {
                $user->add_role( 'advertiser' ); // Add new role
                break; // Stop the loop
            }
        }
    }
}

Код входит в файл function.phpфайл вашей активной дочерней темы (или активной темы).Теперь он должен работать.

Заказ и элементы заказа, связанные с Woocommerce 3:

0 голосов
/ 25 февраля 2019
add_action( 'woocommerce_order_status_completed', 'add_advertiser_role' );

function add_advertiser_role( $order_id ) {

$order = new WC_Order( $order_id );
if ( $order->get_user_id() > 0 ) {
    foreach ( $order->get_items() as $order_item ) {
        if( 4008 == $order_item->get_product_id() ) {
            $user = new WP_User( $order->get_user_id() );

            // Add new role
            $user->add_role( 'advertiser' );
        }
    }
}
}

Программно получить данные заказа WooCommerce

...