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

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

Я уже добавил настраиваемое поле с именем Track & Trace Pakkenr. (см. снимок экрана 1). Но проблема заключается в том, чтобы получить его в электронном письме с полным заказом в разделе «Доставка» (forsendelse на датском языке, см. снимок экрана 2).

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

Вот скриншот 1 и скриншот 2.


person Andreas Pedersen    schedule 16.08.2018    source источник


Ответы (3)


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

add_filter( 'woocommerce_get_order_item_totals', 'insert_custom_line_order_item_totals', 10, 3 );
function insert_custom_line_order_item_totals( $total_rows, $order, $tax_display ){
    // Only on emails notifications
    if( is_wc_endpoint_url() ) return $total_rows; // Exit

    $tracking_label = 'Track & Trace Pakkenr.'; // The tracking label name
    $tracking_value = $order->get_meta( $tracking_label ); // Get the tracking value (custom field).

    if( empty($tracking_value) ) return $total_rows; // Exit

    $new_total_rows  = array(); // Initializing

    // Loop through total rows
    foreach( $total_rows as $key => $value ){
        if( 'payment_method' == $key && ! empty($tracking_value) ) {
            $new_total_rows['tracking_parcel'] = array(
                'label' => $tracking_label,
                'value' => $tracking_value,
            );
        }
        $new_total_rows[$key] = $total_rows[$key];
    }

    return sizeof($new_total_rows) > 0 ? $new_total_rows : $total_rows;
}

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

Вы получите что-то вроде:

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

Из этого:

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

person LoicTheAztec    schedule 16.08.2018
comment
Большое спасибо! - person Andreas Pedersen; 16.08.2018

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

/**
 * Add a custom field (in an order) to the emails
 */
add_filter( 'woocommerce_email_order_meta_fields', 'custom_woocommerce_email_order_meta_fields', 10, 3 );

function custom_woocommerce_email_order_meta_fields( $fields, $sent_to_admin, $order ) {
    $fields['meta_key'] = array(
        'label' => __( 'Label' ),
        'value' => get_post_meta( $order->id, 'meta_key', true ),
    );
    return $fields;
}

Ссылка: https://docs.woocommerce.com/document/add-a-custom-field-in-an-order-to-the-emails/

person David.J    schedule 16.08.2018

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

add_filter( 'woocommerce_email_order_meta_fields', 'woocommerce_email_order_meta_fields_func', 10, 3 );

function woocommerce_email_order_meta_fields_func( $fields, $sent_to_admin, $order ) {

    $fields['Track_Field'] = array(
        'label' => __( 'Track', 'woocommerce' ),
        'value' => wptexturize( get_post_meta( $order->id, 'Track_Field', true ) )
    );


    //... more meta fields goes here

    return $fields;
}

В электронном письме после таблицы электронной почты заказа:

add_action( 'woocommerce_email_after_order_table', 'woocommerce_email_after_order_table_func' );
function woocommerce_email_after_order_table_func( $order ) {
    ?>

    <h3>Track</h3>
    <table>
        <tr>
            <td>Track Fields </td>
            <td><?php echo wptexturize( get_post_meta( $order->id, 'Track_Field', true ) ); ?></td>
        </tr>

        <!--additional custom meta and HTML code goes here-->
    </table>

    <?php
}

Для получения дополнительной помощи см. эту ссылку: Нажмите здесь

person dineshkashera    schedule 16.08.2018
comment
Спасибо! Но куда мне это вставить? - person Andreas Pedersen; 16.08.2018
comment
@AndreasPedersen, пожалуйста, добавьте код в файл functions.php текущей активной темы. - person dineshkashera; 16.08.2018
comment
Если это поможет вам, отметьте это как решение, чтобы оно помогло и другим разработчикам. Спасибо - person dineshkashera; 16.08.2018
comment
Я не забуду это сделать. Оба кода находятся в файле functions.php? - person Andreas Pedersen; 16.08.2018
comment
@АндреасПедерсен да - person dineshkashera; 16.08.2018