Задержка функции WordPress. Это возможно?

Мне было интересно узнать, можно ли запустить функцию WordPress с задержкой в ​​несколько секунд или минут.

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

add_action( 'user_register', 'registration_email_to_admin', 10, 1 );
function registration_email_to_admin( $user_id ) {
    wp_new_user_notification( $user_id );
}

Затем я использую следующий код для фильтрации содержимого электронной почты.

//Filters the contents of the new user notification email sent to the site admin.
add_filter( 'wp_new_user_notification_email_admin', 'custom_wp_new_user_notification_admin_email', 10, 3 );

function custom_wp_new_user_notification_admin_email( $wp_new_user_notification_email, $user, $blogname ) {

    //pass user id into a variable
    $user_id         = $user->id;
    //get teams for that user
    $teams           = wc_memberships_for_teams_get_teams( $user_id );

    $teamNames = [];

    foreach($teams as $teamName){
        array_push($teamNames, $teamName->get_name());
    }

    $teamNamesString = implode (',' , $teamNames);

    $wp_new_user_notification_email['subject'] = sprintf( '[%s] New user registered. User ID = %s', $blogname, $user->id );
    $wp_new_user_notification_email['message'] = sprintf( "%s ( %s ) has registered to the website %s.", $user->user_login, $user->user_email, $blogname ) . "\r\n\r\n";
    $wp_new_user_notification_email['message'] .= sprintf(__('Username: %s'), $user->user_login) . "\r\n";
    $wp_new_user_notification_email['message'] .= sprintf(__('Email: %s'), $user->user_email) . "\r\n";
    $wp_new_user_notification_email['message'] .= sprintf(__('ID: %s'), $user->id) . "\r\n";
    $wp_new_user_notification_email['message'] .= sprintf(__('Team Name: %s'), $teamNamesString) . "\r\n";
    $wp_new_user_notification_email['headers'] = "From: Members Website <[email protected]> \n\r cc: GeorgeFR <[email protected]>";

    return $wp_new_user_notification_email;
}

На всем вышеперечисленном все работает хорошо, кроме последнего добавления к сообщению

$wp_new_user_notification_email['message'] .= sprintf(__('Team Name: %s'), $teamNamesString) . "\r\n";

Используя плагин WooCommerce Memberships for Teams, кажется, что новый пользователь назначается в команду, в которую был приглашен после его/ее регистрации. При этом переменная $teamNamesString всегда пуста в содержании моей электронной почты.

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

Попробуйте изменить приоритет хука,

Akshay Paghdar 10.01.2023 23:03

В user_register вы можете проверить, состоит ли пользователь в команде, если не назначать его, или найти хук, который назначает его и запускает там wp_new_user_notification. Его премиальный плагин, и он мало чем может помочь :)

Martin Mirchev 11.01.2023 09:31

@AkshayPaghdar, спасибо за ответ. Я пробовал это, но это не сработало. Я использовал 9999.

George Fragkos 11.01.2023 14:52

@MartinMirchev тоже спасибо за ваш ответ. Учетные записи создаются после того, как пользователь приглашен владельцем команды. Таким образом, они автоматически назначаются соответствующим командам после создания своих учетных записей. Мне нужно найти что-то, что будет запускать электронное письмо после того, как произойдет назначение в команду. К сожалению, в поддержке плагина сказали, что такого хука с их стороны нет.

George Fragkos 11.01.2023 14:58

Затем создайте свой собственный чек. Я думаю, что сработает использование хука profile_update — developer.wordpress.org/reference/hooks/profile_update. Как вы можете видеть, срабатывает при обновлении профиля, поэтому в вашей функции проверьте, назначил ли пользователь команду или изменил ее, и активируйте уведомление по электронной почте.

Martin Mirchev 11.01.2023 15:53

@MartinMirchev, это звучит как хороший обходной путь! Я собираюсь проверить это и вернуться к вам. Большое спасибо еще раз!

George Fragkos 11.01.2023 18:56

@MartinMirchev, я только что попробовал, но безуспешно. Мои пользователи распределяются по командам после их регистрации. Но я предполагаю, что действие user_register, о котором я упоминал изначально в своем коде, запускается непосредственно перед назначениями команд, и поэтому я не вижу значения команды в своем электронном письме администратора. Профиль_обновления ничего не делал, так как фактического обновления профиля при регистрации не происходит.

George Fragkos 12.01.2023 09:35

Можете ли вы подтвердить, что получили что-либо в wc_memberships_for_teams_get_teams()? Можете ли вы отладить и посмотреть, что вы получите?

Martin Mirchev 12.01.2023 09:45

Давайте продолжим обсуждение в чате.

Martin Mirchev 12.01.2023 09:49
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
9
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Наконец-то я смог найти исправление здесь.

Используя плагины Woo Memberships и Woo Teams for Memberships, у нас есть 3 разных командных роли на нашем веб-сайте. Владельцы, менеджеры и участники. Кроме того, мы используем подписки Woo в сочетании с членством Woo. Таким образом, каждый раз, когда приходит новая покупка подписки, покупатель создает команду и становится ее владельцем.

Коды, которые работали, следующие:

Для владельцев (использовали действие woocommerce_subscription_status_active от Woo Subscriptions):

//fires after purchases
function send_admin_email_with_owner_data_after_purchase( $subscription ) {

    // Get the user in the order
    $user_id = $subscription->get_user_id();

    // Get the products in the order
    $items = $subscription->get_items();
    foreach( $items as $item ) {
        $product = $item->get_product();
        $product_id = $product->get_id();
        if ($product_id == "8865") {
            wp_new_user_notification( $user_id );
        }
    }
}
add_action( 'woocommerce_subscription_status_active', 'send_admin_email_with_owner_data_after_purchase', 10 );

Для менеджеров и участников (использовано действие wc_memberships_user_membership_created от Woo Memberships):

//fires after acceptance of invitations to teams (in my case) 
function send_admin_email_with_member_data( $plan, $args ) {

    $user_id = $args['user_id'];

    $memberArgs        = array (
        $status => "any",
        $role   => "manager,member"
    );
    //get teams for that user
    $teams           = wc_memberships_for_teams_get_teams( $user_id, $memberArgs );

    if ( $args['is_update'] = true && ! empty( $teams ) ) {
        wp_new_user_notification( $user_id );
    }

}
add_action( 'wc_memberships_user_membership_created', 'send_admin_email_with_member_data', 20, 2 );

Я рад, что нашел способ здесь. Спасибо за вашу помощь!

Другие вопросы по теме