Названия элементов заказа, повторяющиеся под таблицей в электронных письмах в WooCommerce - PullRequest
3 голосов
/ 16 июня 2020

У меня есть функция, подключенная к woocommerce_order_item_name с целью добавления уведомления под названиями элементов для элементов прямой поставки и элементов с отложенным заказом:

add_filter( 'woocommerce_order_item_name', 'custom_order_item_notices', 10, 2 );
function custom_order_item_notices( $item_name, $item ) {
    if ( is_admin() )
        return;
    $echoed = false;

    if ( is_cart() || is_checkout() || is_wc_endpoint_url( 'view-order' ) ) {

        $backorder_qty = 0;
        $product = $item->get_product();

        $DID = strtoupper(get_post_meta($item['product_id'] , 'direct-dispatch', true));
        if ($DID) {
            switch ($DID) {
                case 'BEE':
                    echo $item_name . '<small style="display: block;color: grey;">These items will be 
sent directly from the supplier to your specified delivery address. Please allow 3-5 working days for 
delivery. <a target="_blank" href="/delivery/#direct-despatch">Click here</a> for more info.</small>';
                    $echoed = true;
                    break;
            }
        }

        if (get_post_meta($item->get_order_id(), 'split-order-type', true) == 'BKO') {
            echo $item_name . '<small style="display: block;color: grey;">More stock is on it’s way! Please allow 5-10 working days for delivery. <a target="_blank" href="/delivery/#backorders">Click here</a> for more info.</small>';
            $echoed = true;
        }
    }

    if (!$echoed) echo $item_name;
}

У меня возникает проблема, которую я могу 'Не объясняется во всех шаблонах электронной почты, в которых отображаются элементы заказа.

Проблема в том, что названия элементов заказа повторяются снова под таблицей заказов.

См. ниже изображение вывода:

email output

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

1 Ответ

2 голосов
/ 17 июня 2020

Вы используете echo вместо return, я считаю, что это решит вашу проблему

function custom_order_item_notices( $item_name, $item ) {
    if ( is_admin() )
        return;

    if ( is_cart() || is_checkout() || is_wc_endpoint_url( 'view-order' ) ) {

        $backorder_qty = 0;
        $product = $item->get_product();

        $DID = strtoupper( get_post_meta($item['product_id'] , 'direct-dispatch', true) );

        $DID = 'BEE';

        if ( $DID ) {
            switch ( $DID ) {
                case 'BEE':
                    $item_name .= '<small style="display: block;color: grey;">These items will be sent directly from the supplier to your specified delivery address. Please allow 3-5 working days for delivery. <a target="_blank" href="/delivery/#direct-despatch">Click here</a> for more info.</small>';
                    break;
            }
        }

        if ( get_post_meta( $item->get_order_id(), 'split-order-type', true) == 'BKO' ) {
            $item_name .= '<small style="display: block;color: grey;">More stock is on it’s way! Please allow 5-10 working days for delivery. <a target="_blank" href="/delivery/#backorders">Click here</a> for more info.</small>';
        }
    }

    return $item_name;
}
add_filter( 'woocommerce_order_item_name', 'custom_order_item_notices', 10, 2 );
...