Отображение IP-адреса клиента в электронном уведомлении о новом заказе

Когда создается новый заказ, woocommerce отправит электронное письмо администратору, и я хочу, чтобы он также отправлял IP-адрес клиента в электронном письме. Но я не могу заставить его работать, вот что у меня пока есть:

<?php echo get_post_meta( $order->id, '_customer_ip_address', true ); ?>

Этот код входит в mytheme/woocommerce/emails/admin-new-order.php

Любые идеи?

Спасибо.


person davidchannal    schedule 13.12.2016    source источник
comment
Где вы пробовали, это, вероятно, важнее, чем что вы пробовали. Пожалуйста, объясните, где именно вы поместили этот код. (Кроме того, вы не будете echo в электронном письме, так что это, вероятно, часть проблемы).   -  person random_user_name    schedule 13.12.2016
comment
Привет @cale_b, я обновил свой вопрос, код находится в admin-new-order.php. А насчет эха, правильно ли я перейду на: echo __( 'Customer IP Address', 'woocommerce' ) . esc_html( get_post_meta( $order->id, '_customer_ip_address', true ) ) . "\n";   -  person davidchannal    schedule 13.12.2016


Ответы (1)


(добавлена ​​совместимость для WooCommerce версий 3+)

Обновление 2: добавлено условие для отображения IP-адреса только для уведомления администратора о новых заказах. Заменено неопределенное $email_id на $email->id;

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

В приведенном ниже примере IP-адрес клиента будет отображаться непосредственно перед данными о клиенте, перехватчик using woocommerce_email_customer_details:

add_action('woocommerce_email_customer_details', 'send_customer_ip_adress', 10, 4);
function send_customer_ip_adress($order, $sent_to_admin, $plain_text, $email){

    // Just for admin new order notification
    if( 'new_order' == $email->id ){
        // WC3+ compatibility
        $order_id = method_exists( $order, 'get_id' ) ? $order->get_id() : $order->id;

        echo '<br><p><strong>Customer IP address:</strong> '. get_post_meta( $order_id, '_customer_ip_address', true ).'</p>';
    }
} 

Этот код протестирован и полностью работоспособен.

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

Вы также можете использовать вместо них эти хуки:

woocommerce_email_order_details
woocommerce_email_before_order_table
woocommerce_email_after_order_table
woocommerce_email_order_meta

person LoicTheAztec    schedule 13.12.2016
comment
Привет, @LoicTheAztec, твой код работает как шарм, спасибо! - person davidchannal; 14.12.2016
comment
Есть ли вообще возможность получить город вместо IP? У меня много ложных заказов, но IP показывает правду. - person marius; 16.11.2017
comment
@marius Да, вы можете использовать get_post_meta( $order->get_id(), '_billing_city', true ) intead, чтобы получить город… Я обновил этот ответ, поскольку он несовместим с Woocommerce версии 3+ - person LoicTheAztec; 16.11.2017