Как показать поля или ключ поля ACF в электронной почте? - PullRequest
0 голосов
/ 19 сентября 2018

Я использую плагины ACF и ACF для WooCommerce.Если пользователь Woocommerce меняет свои данные, администратор получает электронное письмо об этих изменениях.

Вот полный код:

if( !class_exists('WooCommerceNotifyChanges') ){

class WooCommerceNotifyChanges{

function __construct(){
// customer saves main account data
add_action('woocommerce_save_account_details', array( $this, 'woocommerce_send_notification' ), 15, 1 );

}

function woocommerce_send_notification( $user_id ){
$body       = '';
$to         = 'info@domain.com';    //address that will receive this email
$subject    = 'One of your customers has updated their information.';

$user      = new WP_User( $user_id );
$user_name = $user->user_login;

$body .= '<table>';
$body .= '<tr><td><strong>' . __("Account") . '</strong></td></tr>';
$body .= '<tr><td>Username: </td><td>' . $user_name                                         . '</td></tr>';
$body .= '<tr><td>First name: </td><td>' . $user->billing_first_name . '</td></tr>';
$body .= '<tr><td>Last name: </td><td>' . $user->billing_last_name  . '</td></tr>';
$body .= '<tr><td>Phone: </td><td>' . get_field( 'user_phone', "user_{$user_id}" ) . '</td></tr>';
$body .= '<tr><td>Age: </td><td>' . get_field( 'user_age', "user_{$user_id}" ) . '</td></tr>';
$body .= '</table>';    

//set content type as HTML
$headers = array('Content-Type: text/html; charset=UTF-8;');

//send email
if( wp_mail( $to, $subject, $body, $headers ) ){
    //echo 'email sent';
}else{
    //echo 'email NOT sent';                
}
//exit();
}
}
new WooCommerceNotifyChanges(); 
} 

Я создал несколько настраиваемых полей и отобразил эти поля в пользователеaccount.

В электронном письме администратору эти поля "user_phone" и другие не отображаются.

Плагин "ACF for WooCommerce", например, сохраняет поле "user_phone" вбаза данных в виде meta_key: "field_5b7e4f388fd11" и meta_value: "+79998006655".

enter image description here

В моем коде поле отображается так:

get_field( 'user_phone', "user_{$user_id}" )

Когда вместо имени поля я помещаю ключ поля "field_5b7e4f388fd11" ...

get_field( 'field_5b7e4f388fd11', "user_{$user_id}" )

Я получаю электронное письмо с пустыми полями.

Как я могуисправить эту проблему?


Обновление: Я могу напрямую использовать get_user_meta:

get_user_meta($user_id, 'field_5b7e4f388fd11', $single=true);

Эта опция работает, но если я заменяю существующее значение поля, длянапример, «+79998006655» с новым «+78009995566»,тогда все правильно хранится в базе данных, и старая версия «+79998006655» приходит на электронную почту администратора.

Если в качестве настраиваемого поля установлен флажок, то он правильно сохраняется в базе данных, но только «Array »отображается в электронном письме администратора.

Да, и электронное письмо администратору приходит долго.

Как это можно исправить?

1 Ответ

0 голосов
/ 19 сентября 2018

Нет необходимости добавлять фигурные скобки

Попробуйте этот код:

get_field( 'user_age', "user_$user_id" ) 

ОБНОВЛЕНИЕ 1:

Дополнительная информация на Официальные документы ACF .

Пример из документов ACF:

// This example will retrieve a field value from a user with an ID of 1.
$variable = get_field('field_name', 'user_1');

ОБНОВЛЕНИЕ 2:

Попробуйте это:

get_field ('user_phone', 'user_'.$ user_id)

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