Удалите строку доставки из таблицы заказов в почтовых уведомлениях Woocommerce.

В WooCommerce я пытаюсь удалить строку доставки из таблицы заказов в уведомлениях по электронной почте.

Я много искал, но не нашел способа сделать это.

Любая помощь будет заметна.

2 ответа

Решение

Переопределение шаблонов woocommerce через тему, чтобы удалить строку доставки в уведомлениях по электронной почте, можно легко добавить, добавив немного кода в emails/email-order-details.php шаблон.

Вот выдержка из line 51, Таким образом, вы замените весь код между открытием HTML <tfoot> тег и закрытие </tfoot> пометьте следующим кодом:

        <tfoot>
            <?php
                if ( $totals = $order->get_order_item_totals() ) {
                    $i = 0;
                    foreach ( $totals as $key_total => $total ) {
                        $i++;
                        if( $key_total != 'shipping' ):
                        ?><tr>
                            <th class="td" scope="row" colspan="2" style="text-align:<?php echo $text_align; ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo $total['label']; ?></th>
                            <td class="td" style="text-align:<?php echo $text_align; ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo $total['value']; ?></td>
                        </tr><?php
                        endif;
                    }
                }
                if ( $order->get_customer_note() ) {
                    ?><tr>
                        <th class="td" scope="row" colspan="2" style="text-align:<?php echo $text_align; ?>;"><?php _e( 'Note:', 'woocommerce' ); ?></th>
                        <td class="td" style="text-align:<?php echo $text_align; ?>;"><?php echo wptexturize( $order->get_customer_note() ); ?></td>
                    </tr><?php
                }
            ?>
        </tfoot>

Это проверено и работает. Таким образом, вы получите что-то вроде (без строки доставки):

Расширение @LoicTheAztec и обновление на 2022 год:

Заменять<tfoot>в шаблоне WooCommerce «email-order-details.php» с кодом ниже. Основные изменения:

  1. Добавление имени ключа в цикл foreach,key_total
  2. Добавление условия для игнорирования печати строки, еслиkey_total === 'shipping'
      <tfoot>
            <?php
            $item_totals = $order->get_order_item_totals();

            if ( $item_totals ) {
                $i = 0;
                // Add "$key_total" to be able to grab the key name
                foreach ( $item_totals as $key_total => $total ) {
                    $i++;
                    // Add conditional to only print row if row key is not "shipping" 
                    if( $key_total !== 'shipping' ):
                        ?>
                        <tr>
                            <th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['label'] ); ?></th>
                            <td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['value'] ); ?></td>
                        </tr>
                        <?php
                    endif;
                }
            }
            
            if ( $order->get_customer_note() ) {
                ?>
                <tr>
                    <th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php esc_html_e( 'Note:', 'woocommerce' ); ?></th>
                    <td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>;"><?php echo wp_kses_post( nl2br( wptexturize( $order->get_customer_note() ) ) ); ?></td>
                </tr>
                <?php
            }
            ?>
        </tfoot>

Мы можем увидеть пример того, как имя ключа отображается в объекте «Сведения о заказе». Изображение ниже взято из печати$order->get_order_item_totals();в error_log

Другие вопросы по тегам