Добавьте названия кодов купонов в Woocommerce. Просмотрите детали заказа и уведомления по электронной почте.

Я заметил, что в разделе «Просмотр сведений о заказе и подтверждениях по электронной почте» отображается строка скидки, но не указывается фактический используемый код скидки. Кроме того, если код скидки составляет 0,00 долларов США (у нас иногда есть код 0 долларов США для специальных целей отслеживания), он даже не отображает код вообще. Я весь день пытался найти решение - может ли кто-нибудь дать какие-то рекомендации по этому поводу? Спасибо.

Я получил эту работу до сих пор, чтобы получить фактический код купона:

add_action( 'woocommerce_order_details_after_order_table', 'custom_woocommerce_coupon_line' );
function custom_woocommerce_coupon_line( $order_id ) {
    $order    = wc_get_order( $order_id );

    // An order can have no used coupons or also many used coupons
    $coupons  = $order->get_used_coupons();
    $coupons  = count($coupons) > 0 ? implode(',', $coupons) : '';
    echo $coupons;
 }

Но не могу понять, как поместить его в строку «Скидка» ... или почему строка «Скидка» даже не появляется, когда это товар за 0 долларов с использованием кода 0 долларов.


person user2337231    schedule 07.02.2019    source источник


Ответы (1)


Обновлено - Обработка скидок с нулевым значением

Следующий код будет после строки «скидка» в итоговых строках заказа, отображая примененные к заказу купоны:

add_filter( 'woocommerce_get_order_item_totals', 'add_coupons_codes_line_to_order_totals_lines', 10, 3 );
function add_coupons_codes_line_to_order_totals_lines( $total_rows, $order, $tax_display ) {
    // Exit if there is no coupons applied
    if( sizeof( $order->get_used_coupons() ) == 0 )
        return $total_rows;

    $new_total_rows = []; // Initializing

    foreach($total_rows as $key => $total ){
        $new_total_rows[$key] = $total;

        if( $key == 'discount' ){
            // Get applied coupons
            $applied_coupons = $order->get_used_coupons();
            // Insert applied coupon codes in total lines after discount line
            $new_total_rows['coupon_codes'] = array(
                'label' => __('Applied coupons:', 'woocommerce'),
                'value' => implode( ', ', $applied_coupons ),
            );
        }
    }

    return $new_total_rows;
}

Отображение в режиме просмотра заказа клиента с двумя примененными купонами:

введите описание изображения здесь


Дополнительная версия кода: для обработки примененных купонов с нулевой суммой скидки используйте вместо этого следующее:

add_filter( 'woocommerce_get_order_item_totals', 'add_coupons_codes_line_to_order_totals_lines', 10, 3 );
function add_coupons_codes_line_to_order_totals_lines( $total_rows, $order, $tax_display ) {
    $has_used_coupons = sizeof( $order->get_used_coupons() ) > 0 ? true : false;

    // Exit if there is no coupons applied
    if( ! $has_used_coupons )
        return $total_rows;

    $new_total_rows  = []; // Initializing
    $applied_coupons = $order->get_used_coupons(); // Get applied coupons

    foreach($total_rows as $key => $total ){
        $new_total_rows[$key] = $total;

        // Adding the discount line for orders with applied coupons and zero discount amount
        if( ! isset($total_rows['discount']) && $key === 'shipping' ) {
            $new_total_rows['discount'] = array(
                'label' => __( 'Discount:', 'woocommerce' ),
                'value'    => wc_price(0),
            );
        }

        // Adding applied coupon codes line
        if( $key === 'discount' || isset($new_total_rows['discount']) ){
            // Get applied coupons
            $applied_coupons = $order->get_used_coupons();
            // Insert applied coupon codes in total lines after discount line
            $new_total_rows['coupon_codes'] = array(
                'label' => __('Applied coupons:', 'woocommerce'),
                'value' => implode( ', ', $applied_coupons ),
            );
        }
    }

    return $new_total_rows;
}

Отображать в уведомлениях по электронной почте с купоном, на который не распространяется скидка:

введите описание изображения здесь


Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

person LoicTheAztec    schedule 07.02.2019
comment
Это работает! Ты обалденный. Я нашел много решений для своего проекта на основе ваших ответов, и вы были моим спасителем, даже не взаимодействуя со мной :) Это, к сожалению, все еще не показывает код купона, используемый для сценария $ 0,00 + купон $ 0 (мы вместе взломали возможность для покупатели могут получить бесплатный товар, но с обязательным купоном), но это нормально. Я решил использовать свой предыдущий код, чтобы отобразить отдельную строку для этих специальных типов кодов. Будет ли этот код, который вы отправили, также работать для подтверждения заказа, если я адаптировал его к фильтру woocommerce_email_order_items_table? - person user2337231; 08.02.2019
comment
@ user2337231 Я только что обновил код для обработки отображения кода купонов, даже если сумма скидки равна нулю. Код также обрабатывает уведомления по электронной почте, где также отображаются коды купонов. - person LoicTheAztec; 08.02.2019
comment
Хммм ... похоже, все еще не работает ... может быть, это потому, что товар стоит 0,00 долларов США или может конфликтовать с другим фильтром? Снимок экрана: ссылка - person user2337231; 08.02.2019
comment
Хммм, должно быть, конфликт с другим фрагментом кода в функциях .... неважно, я могу использовать альтернативное решение для сценария кода $ 0 + $ 0, вы уже очень помогли. Последний вопрос, если меня не слишком надоедает: могу ли я применить ваше решение непосредственно к действию woocommerce_email_order_items_table? - person user2337231; 08.02.2019
comment
@ user2337231 Я повторно обновил код ... Я добавил для вас специальную версию кода ... попробуйте, он должен работать. - person LoicTheAztec; 08.02.2019
comment
Большое спасибо за ваши усилия и помощь ... похоже, все еще не работает для сценария $ 0 item + $ 0 code. Не беспокойтесь об этом, хотя вы были более чем полезны! - person user2337231; 08.02.2019