Вы можете просто использовать функцию wordpress is_user_logged_in()
с помощью крючка woocommerce_thankyou
, чтобы проверить статус заказа, и пользователь выполнил вход или нет.
add_action('woocommerce_thankyou', 'my_custom_tracking', 10, 1);
function my_custom_tracking($order_id) {
if (!$order_id) {
return;
}
// Lets grab the order
$order = wc_get_order($order_id);
$_billing_email = get_post_meta($order_id, '_billing_email', true);
$user = get_user_by('email', $_billing_email);
//for successful order
if (in_array($order->status, ['processing', 'completed'])) {
if (is_user_logged_in() || $user) {
//it is a returning user
} else {
//user is a guest
}
}
//unsuccessful order
else {
}
}
Пожалуйста, обратите внимание: если вы хотите проверить только пользователь вошел в систему или нет, то замените if (is_user_logged_in() || $user)
на if (is_user_logged_in())
связанный с этим вопрос: woocommerce php snippets for proceeded to checkout to know user is login or not
ОБНОВЛЕНО v2
add_action('woocommerce_thankyou', 'wh_isReturningCustomer', 10, 1);
function wh_isReturningCustomer($order_id) {
if (!$order_id) {
return;
}
// Lets grab the order
//$order = wc_get_order($order_id);
$_billing_email = get_post_meta($order_id, '_billing_email', true);
$args = [
'post_type' => 'shop_order',
'post__not_in' => [$order_id], //exclude current Order ID from order count
'post_status' => ['wc-processing', 'wc-completed'],
'posts_per_page' => -1,
'meta_query' => [
'relation' => 'AND',
[
'key' => '_billing_email',
'value' => $_billing_email,
'compare' => '=',
]
]
];
$posts = new WP_Query($args);
if ($posts->post_count) {
//it is a returning user
} else {
//user is a guest
}
}
Код идет в файле function.php вашего активного ch ild тема (или тема). Или также в любых плагинах php-файлов.
Код проверен и работает.
Надеюсь, это поможет!
Спасибо за помощь, оба ответа сработали для меня :) –