Отправка электронной почты каждый раз, когда WooCommerce меняет свой адрес - PullRequest
0 голосов
/ 22 декабря 2019

Мой текущий код

// Send notification email when customer changes address.
add_action( 'woocommerce_customer_save_address','notify_admin_customer_address_change', 10, 2);
function notify_admin_customer_address_change( $user_id ) {

    // Set the $from_name, $from_email, and $to for your site.
    $from_name = 'Your From Name';
    $from_email = 'email@yourdomain.com';
    $to = 'email@somedomain.com';

    global $woocommerce, $current_user;

    // format email
    $message = 'Username: ' . $current_user->user_login . "\n";
    $message .= 'User Email: ' . $current_user->user_email . "\n";
    $message .= 'User First Name: ' . $current_user->user_firstname . "\n";
    $message .= 'User Last Name: ' . $current_user->user_lastname . "\n";
    $message .= "\n";
    $message .= "\n";
    $message .= "Billing Address:\n";

    // get the data from the profile after it's set by the customer save
    $woocommerce->customer->set_default_data();
    $message .= $woocommerce->customer->get_address() . "\n";
    $address_2 = $woocommerce->customer->get_address_2();
    if ($address_2 != '') {
        $message.= $address_2 . "\n";
    }
    $message .= $woocommerce->customer->get_city() . " ";
    $message .= $woocommerce->customer->get_state() . " ";
    $message .= $woocommerce->customer->get_postcode() . "\n";
    $message .= $woocommerce->customer->get_country() . "\n\n";
    $message .= "Shipping Address:\n";
    $message .= $woocommerce->customer->get_shipping_address() . "\n";
    $shipping_address_2 = $woocommerce->customer->get_shipping_address_2();
    if ($shipping_address_2 != '') {
        $message .= $shipping_address_2 . "\n";
    }
    $message .= $woocommerce->customer->get_shipping_city() . " ";
    $message .= $woocommerce->customer->get_shipping_state() . " ";
    $message .= $woocommerce->customer->get_shipping_postcode() . "\n";
    $message .= $woocommerce->customer->get_shipping_country();


    $headers = 'From: ' . $from_name . ' <' . $from_email . '>' . "\r\n";

    wp_mail($to, 'Customer Address Change Notice', $message, $headers);
}

Проблема с кодом заключается в том, что я получаю уведомление, но адрес не является их новым адресом, адрес в электронном письме является старым адресом. Т.е. это позади.

1 Ответ

0 голосов
/ 22 декабря 2019

Вы извлекаете адрес из сеанса, пока он еще находится в процессе сохранения. Есть еще один хук, который вы можете попробовать:

do_action( 'woocommerce_after_save_address_validation', $user_id, $load_address, $address, $customer );

, поэтому вы можете попробовать использовать его так:

add_action( 'woocommerce_after_save_address_validation', 'send_address_notification', 30, 4);

function send_address_notification($user_id, $load_address, $address, $customer){

//... Use $address & $customer to build your message. ...

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...