通过cPanel在WordPress上运行更改角色Cron作业

时间:2018-08-06 13:04:31

标签: php wordpress cron

有人可以在这里指出正确的方向吗?

我正在尝试建立一个插件,该插件在激活用户时设置3个月后,在激活时设置cron作业以更改用户的user_role。停用插件后,也应删除cron作业。

到目前为止的插件代码为:

<?php
/*
Plugin Name: Cron Job
*/

add_filter( 'cron_schedules', 'example_add_cron_interval' );

function example_add_cron_interval( $schedules ) {
    $schedules['five_seconds'] = array(
        'interval' => 5,
        'display'  => esc_html__( 'Every Five Seconds' ),
    );

    return $schedules;
}

function cron_hook(){
    $users = get_users(
        array(
            'fields' => array( 'ID', 'user_registered' ),
            'role'   => 'coaching',
        )
    );

    foreach ( $users as $user ) {

        $time = $user->user_registered;

        if(strtotime($time) < strtotime('-3 months')) {
            $u = new WP_User( $user->ID );
            // Remove role
            print_r($u);

            $u->remove_role( 'coaching' );

            // Add role
            $u->add_role( 'platinum' );
        }
    }
}

//echo '<pre>'; print_r( _get_cron_array() ); echo '</pre>';

public static function activate() {
    wp_schedule_event( time(), 'five_seconds', 'cron_job' );
}

public static function deactivate() {
    wp_clear_scheduled_hook('cron_job');
}

我正在通过cPanel运行wp-cron.php(当前设置为测试的5秒)。

1 个答案:

答案 0 :(得分:0)

设法找到解决方案。

我完成的代码是:

register_activation_hook ( __FILE__, 'cron_job' );

function cron_job() 
{
wp_schedule_event( time(), 'hourly', 'hourly_job' );
}

add_action( 'hourly_job', 'cron_job_task' );

function cron_job_task () 
{
    $users = get_users(
        array(
            'fields' => array( 'ID', 'user_registered' ),
            'role'   => 'coaching',
        )
    );

    foreach ( $users as $user ) {
        $time = $user->user_registered;
        if(strtotime($time) < strtotime('-3 months')) {
            $u = new WP_User( $user->ID );
            $u->remove_role( 'coaching' );
            $u->add_role( 'platinum' );
        }
    }
}
?>

每小时设置一次cPanel cron作业。