我得到了所有用户。如果任何用户的截止日期接近365,他/她应该在15天前收到一封电子邮件提醒到他们的注册邮件id。
有了这个函数,我能够得到第一年的正确结果,但从下一年开始,用户注册日期将是相同的,所以它不会与365天计算。
我不知道该怎么办。请帮帮我。 <?php
if (!function_exists('nopaymentmade')) {
function nopaymentmade($user_id) {
$blogusers = get_users('role=paid-membership');
// Array of WP_User objects.
foreach ($blogusers as $user) {
//$user->user_registered;
// $user_id=$user->ID;
$user->user_registered;
$user_id = $user->ID;
$user_login = $user->user_login;
$user_email = $user->user_email;
$devabirthdate = $user->user_registered;
/* input birthday date format -> Y-m-d */
list($y, $m, $d) = explode('-', $devabirthdate);
$nowdate = mktime(0, 0, 0, date("m"), date("d"), date("Y"));
$nextbirthday = mktime(0, 0, 0, $m, $d, date("Y"));
if ($nextbirthday < $nowdate)
$nextbirthday = $nextbirthday + (60 * 60 * 24 * 365);
$daycount = intval(($nextbirthday - $nowdate) / (60 * 60 * 24));
//echo $daycount;
if ($daycount < 349) {
/* echo $user->user_registered;
echo "<br/>";
echo $user_id=$user->ID;
echo "<br/>";
echo $user_login=$user->user_login;
echo "<br/>";
echo $user_email=$user->user_email;
echo "<br/>"; */
$message = sprintf(__('your Account will be expired in next 15 days %s:'), get_option('blogname')) . "'r'n'r'n";
$message .= sprintf(__('Username: %s'), $user_login) . "'r'n'r'n";
$message .= sprintf(__('E-mail: %s'), $user_email) . "'r'n";
@wp_mail(
$user_email, sprintf(__('[%s] Account Expiration alert'), get_option('blogname')), $message
);
}
}
}
?>
一个更好的方法。
- 确保你的cron每天运行一次
- 总是在用户元中存储下一个生日,这样对于每个用户,您可以检查相同的元键值,并确保当cron运行时,当条件变为真时,您在发送邮件后更新下一个生日。
- 在上面的声明中,我所说的条件将包括检查当前日期与存储在usermeta中的下一个生日相差15天的条件。