Получить user_id клиента в шаблоне нижнего колонтитула электронной почты Woocommerce

Я пытаюсь получить current_user_id в пользовательском шаблоне электронной почты woocommerce, но он возвращает 0. Кто-нибудь знает, как получить user_id в шаблоне электронной почты в WordPress. Я получаю идентификатор пользователя, когда использую этот код в любом шаблоне php.

Ниже мой код:

<?php global $current_user;
get_currentuserinfo();
echo '<h4>Your code:</h3>' . $current_user->ID . '';
?>

Вот полная ссылка на код шаблона:
электронная почта-шаблон кода

2

Решение

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

Чтобы получить идентификатор пользователя клиента, вы можете установить и получить некоторые данные в $GLOBAL переменная:

  • Установить данные — На твою активную тему function.php файл:
add_action( 'woocommerce_email_header', 'wc_email_user_id', 10, 2 );
function wc_email_user_id( $email_heading, $email ) {
// Set global variable data: user ID and Order ID
$GLOBALS['emails_custom_data'] = array(
'user_id' => get_post_meta( $email->object->ID, '_customer_user', true ), // Set the user ID
'order_id' => $email->object->ID, // Set the Order ID
);
}
  • Получить данные — В вашем файле шаблона сразу после:
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly
}

## --- Your custom Code start here --- ##

$refNameGlobalsVar = $GLOBALS; // Get the data
$custom_data = $refNameGlobalsVar['emails_custom_data']; // Set the data in a variable

$user_id = $custom_data['user_id']; // Get the user ID
$order_id = $custom_data['order_id']; // Get the order ID (in case of…)

// Testing output
echo '<p>The user ID is '.$user_id.' | From the Order ID: '.$order_id.'</p>';

## --- End of custom code --- ##

?>

Этот код протестирован и работает

2

Другие решения

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

apply_filters( 'woocommerce_email_footer_text', get_option( 'woocommerce_email_footer_text' )

Вместо того, чтобы писать прямо так

global $current_user;
get_currentuserinfo();
echo '<h4>Your code:</h3>' . $current_user->ID . '';

Вы можете применить фильтр, как это

global $current_user;
apply_filters( 'woocommerce_custom_template_email', $current_user->ID );

И когда срабатывает функция электронной почты, отвечающая за отправку электронной почты, вы используете add_filter, как это

add_filters( 'woocommerce_custom_template_email', 'custom_email_function' );
function custom_email_function($user_id) {
global $current_user;
$user_id = $current_user->ID;
return $user_id;
}

Может быть, таким образом вы можете получить текущий идентификатор пользователя. Также убедитесь, что вы пытаетесь получить текущий идентификатор пользователя для вошедших в систему пользователей.

1

По вопросам рекламы [email protected]