WordPress 计划事件未在设定时间内触发

Posted

技术标签:

【中文标题】WordPress 计划事件未在设定时间内触发【英文标题】:WordPress schedule event not firing in set time 【发布时间】:2016-07-18 21:35:21 【问题描述】:

在 WordPress 中,我正在创建一个向用户发送电子邮件的插件。为此,我正在使用 WordPress cron 工作。所以基本上它会做的只是每小时向用户发送电子邮件。 所以我的代码是这样的

public function __construct() 
    add_action('init', array( $this, 'send_emails_to_users') );  
    add_action('cliv_recurring_cron_job', array( $this, 'send_email') );


public function send_emails_to_users() 
  if(!wp_next_scheduled('cliv_recurring_cron_job')) 
          wp_schedule_event (time(), 'hourly', 'cliv_recurring_cron_job');
    


public function send_email() 
    //send email code goes here

这里一切看起来都不错,但它没有发送电子邮件。

如果我这样写代码

public function __construct() 
    add_action('head', array( $this, 'send_email') );  

然后它发送电子邮件。但问题在于,它会在每次页面加载或用户访问网站时发送电子邮件。

这就是为什么我想使用wp_schedule_event 每小时发送电子邮件。

那么有人可以告诉我如何解决这个问题吗?

任何建议或帮助将不胜感激。

【问题讨论】:

您设置了服务器 cron 吗? wp 只会在有人访问该站点并且任务到期时发送 我测试你的工作。对于测试,您需要以秒为单位测试间隔。 @David 我正在本地 LAMP 上测试它 wordpress cron 不是 cronjob(如在服务器中),它没有能力自行运行,当有人访问该站点时,他们会触发任何应有的 wp cronjobs。这与将在正确时间实际运行代码的服务器(unix = crontab,windows = 任务调度程序)cron 作业不同。使用 wp 执行此操作的方法是如上所述设置您的工作,然后创建一个 crontab 以在预定时间之后访问您的站点。 @newUser 你错过了重点...... wp_schedule_event 存在于你的db和php应用程序(wp)中。没有方法可以启动 php 本身。当您访问 wp 应用程序并且计划的 evt 已过期时,php 将运行附加到事件的代码。如果没有人访问,它会运行。现在 linux “Cronjob” 完全不同了,它按照规范运行。 time 因为它是一个 linux 应用程序,如果服务器打开,它会在正确的时间运行。您知道正在发送电子邮件,因此您的代码有效。您在 prod 服务器上测试的 Crontab(无论如何它都可以正常工作)。 ***.com/questions/7195503/… 【参考方案1】:

如果您想每隔一小时运行一次 cron,那么您需要添加以下代码:

public function __construct() 
    // Call function for cron
    add_action('init', array( $this, 'send_emails_to_users') );


public function send_emails_to_users() 
    if(!wp_next_scheduled('cliv_recurring_cron_job')) 
        // Add "cliv_recurring_cron_job" action so it fire every hour
        wp_schedule_event(time(), 'hourly', 'cliv_recurring_cron_job');
    


add_action('cliv_recurring_cron_job', array( $this, 'send_email') );
public function send_email() 
    //send email code goes here

更多信息see link

【讨论】:

是的,我已经完成了我的代码。但我想知道我应该加载 wp-cron.php 来运行 cron 还是加载我网站上的任何页面都会运行自定义函数? 当 WordPress 初始化时它会自动调用不需要加载 wp-cron.php,在这里检查初始化操作codex.wordpress.org/Plugin_API/Action_Reference/init 那么当没有用户访问该站点时如何运行该函数。即使没有用户访问该站点,我也想运行我的函数。 所以你需要在 wordrpess 目录的根目录中添加一个 php 页面,并在服务器中添加 cron 作业,使其每 1 小时自动运行一次【参考方案2】:

首先, 1)如果你想动态工作,你需要在你的服务器中设置 crontab 2)如果你想手动wordpress调度程序将在页面运行后调用

所以,

对于下面的 crontab 设置是有用的链接: crontab

【讨论】:

我想要手动 wordpress 调度程序。为此,我使用了这些功能,但根本没有触发。 codex.wordpress.org/Function_Reference/wp_cron codex.wordpress.org/Function_Reference/wp_schedule_event 在问这个问题之前我已经全部看完了。它在这里不起作用。

以上是关于WordPress 计划事件未在设定时间内触发的主要内容,如果未能解决你的问题,请参考以下文章

触摸事件未在 UITableView 上触发

Drop 事件未在 chrome 中触发

Drop 事件未在 chrome 中触发

高级搜索完成事件未在 VBA 中触发

模糊事件未在角度分量上触发

beforeShow 事件未在 jQueryUI Datepicker 上触发