我有一个wordpress网站,允许用户设置某一天的提醒,它将其存储在数据库中,可以在用户登录时显示,或者向他们发送电子邮件。
我遵循http://codex.wordpress.org/Function_Reference/wp_cron中给出的示例代码,并将下面的代码放入我编写的插件的主.php文件中,该文件在所有其他方面都完美运行。
if ( ! wp_next_scheduled( 'checkReminderEmails' ) ) {
wp_schedule_event( 1411693200, 'daily', 'checkReminderEmails' );
} //1411693200 is the unix timestamp for 1am a couple of days ago
add_action( 'checkReminderEmails', 'sendReminderEmails' );
function sendReminderEmails()
{
$table_name = $wpdb->prefix."reminders";
$query = "SELECT * FROM $table_name WHERE sendReminder = 1 and reminderDate = CURRENT_DATE( )";
$appointments = $wpdb->get_results( $query);
foreach ( $appointments as $info )
{
$message = "Hello here is your reminder.";
$toAddress = $info->userEmail;
$subject = "This is your reminder.";
wp_mail( $toAddress, $subject, $message);
}
} // end sendReminderEmails()
我检查了PHP数据库中的wp_options表,可以在那里看到以下代码
{s:18:"sendReminderEmails";a:1:{s:32:"40cd750bba9870f18aada2478b24840a";a:3:{s:8:"schedule";s:5:"daily";s:4:"args";a:0:{}s:8:"interval";i:86400;}}}i:1411693200;a:1:
我可以使用wp_mail()从网站上收到其他电子邮件,所以我知道服务器支持该功能,而且我知道wp_cron作业在时间过后访问网站之前都没有被解雇,但是我无法正确地解决这个问题。我错过了一些明显的东西吗?
编辑:对于任何想知道的人,我使用了wp-cron-dashboard插件(https://wordpress.org/plugins/wp-cron-dashboard/)尽管警告说它在2年多时间内没有更新,以检查我的cron作业是否安排得当
我还必须添加全局$ wpdb;在我的函数的顶部,它未能触发的原因是因为没有声明我无法使用get_results()函数。
我还发现,如果你去wp-cron.php,你将手动强制任何预定的cron作业被触发,并且所有输出都会显示在那里,所以可以通过添加echo语句来调试cron作业到那个页面。
答案 0 :(得分:0)
我知道这已经老了,但我立即看到的一件事是你需要global $wpdb;
作为sendReminderEmails()
功能的第一行,否则它会炸弹。
我经常通过在front-page.php
添加类似sendReminderEmails(); exit;
的内容来快速测试我的$('#table_1 .tableRow div').click(function() {
$(this).removeClass().addClass('selectedText').siblings().removeClass().addClass('blueText')
})
中的cron函数,就像该功能完全正常的健全检查一样。