如何向自动用户发送“不活动”电子邮件?

时间:2015-11-03 作者:Schalk Venter

我目前正在一个编辑性很强的WordPress网站上工作,我想实现的一个功能是,当某个特定角色的人(在本例中是参与者/作者)在设定的时间段(例如20天)内没有创建/发布任何新内容时,向他们发送电子邮件警报。

然而,我不知道什么是最好的尝试方式。用钩子做这样的尝试有意义吗?然而,我担心的是,这些通知将取决于站点/仪表板的加载或触发此检查的特定操作?

1 个回复
SO网友:Nathan Johnson

你的问题有三个主要部分:

如果贡献者和作者在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\' )
    );
  }
}

相关推荐

Register email as username

我在Wordpress多站点中使用Wordpress 4.9.4,我需要允许用户使用其电子邮件地址作为用户名进行注册。查看代码,我发现阻止我完成的是ms函数。php有一个正则表达式过滤除a-z以外的其他字符的用户名,因此当电子邮件是用户名时,我会得到“用户名只能包含小写字母(a-z)和数字。”我在ms函数中更改了该正则表达式。php,它工作得很好。现在我的问题是,我不想每次更新wordpress时都重新编码wpmu\\u validate\\u user\\u signup函数。在这个问题上有什么好的做法