Добавление получателя в уведомление о новом заказе Woocommerce на основе категорий позиций заказа - PullRequest
0 голосов
/ 22 января 2020

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

// for reference only:
update_term_meta( $cat_id, 'user_id', $user_id );
update_user_meta( $user_id, 'cat_id', $cat_id );

Каждый продукт находится в одной категории продуктов, и в каждой категории продуктов определен термин meta 'user_id'.

Когда в Woocommerce запускается уведомление о новом заказе, мне нужно добавить к нему получателя на основе категорий продуктов, связанных с каждой позицией заказа. По какой-то причине моя функция не работает. Получатели никогда не добавляются. Вот эта функция:

function maybe_add_new_order_email_recipient( $recipient, $order ) {
    if( ! is_a($order, 'WC_Order') ) return $recipient;

    foreach( $order->get_items() as $items ) {
        $terms = wp_get_post_terms( $items->get_product_id(), 'product_cat' );

        foreach( $terms as $wp_term ){
            $user_id = get_term_meta($wp_term->term_id, 'user_id');
            $user_info = get_userdata($user_id);
            $user_email = $user_info->user_email;

            $recipient .= ','.$user_email;
        }
    }

    return $recipient;
}
add_filter('woocommerce_email_recipient_new_order', 'maybe_add_new_order_email_recipient', 1, 2);

Что мне здесь не хватает!?

1 Ответ

0 голосов
/ 22 января 2020

Я понял это сам ... после небольшого дополнительного расследования. get_term_meta возвращал массив, поэтому get_userdata($user_id[0]) требовалось. Вот полностью рабочая функция:

function maybe_add_new_order_email_recipient( $recipient, $order ) {
    if( ! is_a($order, 'WC_Order') ) return $recipient;

    foreach( $order->get_items() as $items ) {
        $terms = wp_get_post_terms( $items->get_product_id(), 'product_cat' );

        foreach( $terms as $wp_term ){
            $user_id = get_term_meta($wp_term->term_id, 'user_id');
            $user_info = get_userdata( $user_id[0] );
            $user_email = $user_info->user_email;

            $recipient .= ','.$user_email;
        }
    }

    return $recipient;
}
add_filter('woocommerce_email_recipient_new_order', 'maybe_add_new_order_email_recipient', 1, 2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...