Wordpress cron工作没有解雇

时间:2014-10-01 17:32:36

标签: php wordpress cron

我有一个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作业到那个页面。

1 个答案:

答案 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函数,就像该功能完全正常的健全检查一样。