Напишите администратору через 36 часов после регистрации нового пользователя в WordPress - PullRequest
0 голосов
/ 16 мая 2018

Кто-нибудь здесь знает или может дать мне руководство о том, как написать администратору WordPress через 36 часов после регистрации нового пользователя на их веб-сайте?

Вот что я пытаюсь сделать:

  1. Найти всех пользователей в базе данных
  2. Проверьте, есть ли у пользователей определенная роль / роли
  3. Проверьте, если некоторые из этих пользователей уже зарегистрированы в течение 36 часов
  4. Используйте WP_cron, чтобы установить их (я буду использовать каждый час, чтобы быть уверенным, что поймаю всех этих пользователей)

Вот код, который я делаю до сих пор, но я всегда теряюсь, когда хочу, чтобы пользователи зарегистрировались в течение 36 часов.

/**


* SEND A NOTIFICATION AFTER 36 HOURS
 */

function myprefix_custom_cron_schedule( $schedules ) {
    $schedules['every_hour'] = array(
        'interval' => 3600, // Every hour
        'display'  => __( 'Every hour' ),
    );
    return $schedules;
}
add_filter( 'cron_schedules', 'myprefix_custom_cron_schedule' );

//Schedule an action if it's not already scheduled
if ( ! wp_next_scheduled( 'qd_cron_hook' ) ) {
    wp_schedule_event( time(), 'every_hour', 'qd_cron_hook' );
}

///Hook into that action that'll fire every hour
 add_action( 'qd_cron_hook', 'qd_cron_function' );

//create function, that runs on cron
function qd_cron_function() {
    $args = array(
        'role'         => 'business-pending',
        'fields'       => array( 'ID', 'user_registered' ),
     );
    $users = get_users( $args );

    foreach($users as $user){
        $user_regDate = $user->user_registered;
        $dateNow = gmdate("Y-m-d H:i:s");

Здесь я заблудился. Я предполагаю, что теперь я должен вычесть время из значения user_registered и затем создать условие, чтобы отображать только тех пользователей, которые зарегистрировались за 36 часов.

        $emailto = get_option('admin_email');
        $subject = 'Please activate this user';
        $message = 'This user has not been activated.';
        wp_mail( $emailto, $subject, $message );
    }

Любая помощь будет оценена. Большое спасибо!

1 Ответ

0 голосов
/ 17 мая 2018

Пожалуйста, проверьте этот ответ:

https://wordpress.stackexchange.com/questions/174700/wp-user-query-users-by-registered-date

Где у вас есть:

$args = array(
    'role'         => 'business-pending',
    'fields'       => array( 'ID', 'user_registered' ),
 );
$users = get_users( $args );

Вы можете заменить на:

$args = array(
    'role'         => 'business-pending',
    'fields'       => array( 'ID', 'user_registered' ),
    'date_query'    => array(
        array(
            'before'     => date("Y-m-d H:i:s", strtotime(date("Y-m-d H:i:s")." -36 hours")), // registered more than 36 hours ago
            'inclusive' => true,
        ),
     ),
 );
$users = get_users( $args );

Предложение:

Имейте в виду, что с вашим кодом вы будете регистрировать пользователей более 36 часов. Скорее всего, вам следует использовать какой-либо флаг в базе данных, чтобы указать, какие электронные письма пользователей уже были отправлены.

...