Отправка электронной почты бизнесу на основе выбора выпадающего списка продуктов

#php #html #wordpress #woocommerce

#php #HTML #wordpress #woocommerce

Вопрос:

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

Рюкзак $ 50

Выберите опцию

  • Бизнес прежде всего
  • Бизнес второй
  • Бизнес третий

Если они сначала выберут бизнес, на электронную почту Business First будет отправлено электронное письмо с подтверждением заказа info@businessfirst.com

Это код, который у меня есть до сих пор

HTML

 <select name="wapf[field_5f87355d578fd]" class="wapf-input" data-is-required="" data-field-id="5f87355d578fd">
    <option value="">Choose an option</option>
    <option value="business_1">Business 1</option>
    <option value="business_2">Business 2</option>
    <option value="business_3">Business 3</option>
</select>
       
  

PHP

Я добавил это в functions.php

 function sv_conditional_email_recipient( $recipient, $order ) {

    // Bail on WC settings pages since the order object isn't yet set yet
    // Not sure why this is even a thing, but shikata ga nai
    $page = $_GET['page'] = isset( $_GET['page'] ) ? $_GET['page'] : '';
    if ( 'wc-settings' === $page ) {
        return $recipient; 
    }

    // just in case
    if ( ! $order instanceof WC_Order ) {
        return $recipient; 
    }

    $items = $order->get_items();

    // check if a shipped product is in the order   
    foreach ( $items as $item ) {
        $product = $order->get_product_from_item( $item );

        // adds our extra recipient if customer selected Business 1 from the dropdown on this product order
        if (select(name="wapf[field_5f87355d578fd]") value == "business_1") {
            $recipient .= ', info@businessfirst.com';
            return $recipient;
        }

        // adds our extra recipient if customer selected Business 2 from the dropdown on this product order
        if (select(name="wapf[field_5f87355d578fd]") value == "business_2") {
            $recipient .= ', info@businesssecond.com';
            return $recipient;
        }
    }

    return $recipient;
}
add_filter( 'woocommerce_email_recipient_new_order', 'sv_conditional_email_recipient', 10, 2 );
  

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

Комментарии:

1. Что означает «не совсем правильно»? Есть ли ошибка, которая выдается?

2. Где определен этот фильтр? new_order это не в WooCommerce или вызываемая функция select()

3. @HowardE Я только что обновил свой код, чтобы отразить правильный фильтр. В select() этой области я немного заблудился. То, что я пытаюсь сделать, это отправить дополнительное электронное письмо с новым заказом на адрес электронной почты по моему выбору при покупке продукта, в котором пользователь выбрал из select выпадающего name="wapf[field_5f87355d578fd]" option списка значение an со значением business_1

4. У вас не включена отладка, когда вы это делаете, поскольку select это не функция. Это должно вызвать какую-то ошибку. Вам нужно найти значения сохраненных вами данных для каждого элемента заказа. Это утверждение (select(name="wapf[field_5f87355d578fd]") value == "business_1") никогда не вернет true .

5. Проблема со всем вашим вопросом заключается в том, что вывод вашего HTML <select> на странице продукта — это не то, что имеет значение, а скорее — где хранятся данные? Хранится ли он как мета элемента заказа или что? Используете ли вы плагины для добавления этого выпадающего списка или ACF? После добавления товара в корзину тот факт, что он был в какой-то момент $_POST[ 'wapf[field_5f87355d578fd]'] , больше не имеет значения… Где хранится дополнительная информация? Это то, что вам нужно для извлечения этого поля. Итак, я бы сначала отладил данные корзины, а затем данные заказа.

Ответ №1:

Вы хотите отправлять их по почте только в том случае, если они выбирают Бизнес 1, или они также должны иметь возможность отправлять бизнес 2 или 3? Если это так, вам нужно поместить оператор if в функцию с двумя другими if для других случаев.

Кроме того, если вы пытаетесь получить значение поля, у вас не может быть пробела. select(name="wapf[field_5f87355d578fd]") value

Я думаю, что в этом блоге точно описано, что вам нужно.

Комментарии:

1. Я также хочу иметь возможность отправлять электронные письма бизнесу 2, бизнесу 3 и т. Д…

2. В блоге, о котором я упоминал, рассказывается, как именно это сделать. 🙂

3. Это чертовски близко. Я только что обновил его. Я не думаю, что у меня есть правильная инструкция if в разделе // adds our extra recipient if there's customer selected Business 1 from the dropdown on any product Я пытаюсь выяснить, как отправлять электронное письмо только тогда, когда пользователь выбирает опцию из выпадающего списка продукта. Здесь находится продукт, с помощью которого я пытаюсь это сделать: rootmeals. wpengine.com/product/meals-donation Поле, в котором я пытаюсь достичь этого с помощью выпадающего списка » Агентство «.

4. Затем вы должны добавить оператор if, чтобы проверить, не является ли поле выбора пустым, и если это не так, используйте операторы If, чтобы проверить, какой вариант был выбран.