你的问题有三个主要部分:
如果贡献者和作者在20天内没有登录,请发送电子邮件。第一步是添加用户元以跟踪上次登录。WordPress不会跟踪用户最后一次登录的时间,因此我们必须手动完成。
//* Add action on login to update the last_login user meta
add_action( \'wp_login\', \'wpse_207422_user_last_login\', 10, 2 );
function wpse_207422_user_last_login( $user_login, $user ) {
update_user_meta( $user->ID, \'last_login\', time() );
}
接下来,我们检查活动是否已安排,如果未安排,请安排。这应该只运行一次,但您永远不会知道,另一个插件可能会意外禁用它。
//* Schedule a daily cron event
if( ! wp_next_scheduled( \'wpse_207422_inactivity_reminder\' ) ) {
wp_schedule_event( time(), \'daily\', \'wpse_207422_inactivity_reminder\' );
}
最后,为我们的cron事件添加一个操作。回调将执行用户查询,目标是参与者和作者以及元值last\\u login。通过比较可以确保最后一次登录的时间超过20天。
//* Add action to daily cron event
add_action( \'wpse_207422_inactivity_reminder\', \'wpse_207422_inactivity_reminder\' );
function wpse_207422_inactivity_reminder() {
//* Get the contributors and authors who haven\'t logged in in 20 days
$users = new \\WP_User_Query( [
\'role\' => [ \'contributor\', \'author\', ],
\'meta_key\' => \'last_login\',
\'meta_value\' => strtotime( \'-20 days\' ),
\'meta_compare\' => \'<\',
] );
foreach( $users->get_results() as $user ) {
wp_mail(
$user->user_email,
__( \'Inactivity Notice\', \'wpse-207422\' ),
__( \'We notice you have not logged in for 20 days.\' ,\'wpse-207422\' )
);
}
}