如何在类中使用wp_schedule_single_event()

时间:2016-08-30 11:35:16

标签: php wordpress

由于某些原因,我无法使用wp_schedule_single_event触发预定事件。

class My_Class
{
    public function __construct ()
    {
        add_action ( 'after_my_event', array ($this, 'schedule_email_send'), 10, 3 );
        add_action ( 'sendanemail', array ($this, 'send_an_email'), 10, 1 );
    }

    // 3rd party action hook (fires successfully)
    public function schedule_email_send ( $arg1, $arg2, $arg3 )
    {
        wp_clear_scheduled_hook ( 'sendanemail'), array ($arg1) );
        wp_schedule_single_event ( time () + 60, 'sendanemail'), array ($arg1) );
    }

    // Cron task (is never fired)
    function send_an_email ( $arg1 )
    {
        $got_here = true;        // Breakpoint set

        ... code that sends an email.
    {
}

使用上面的代码,第三方WP插件成功触发after_my_event挂钩并执行schedule_email_send(),但我的send_an_email()中的断点永远不会到达。我在该例程中设置断点,然后单击站点上的随机页面,但sendanemail操作永远不会触发。当然,出于测试目的,我希望它能在1分钟内发射。

有谁看到我做错了什么?

1 个答案:

答案 0 :(得分:0)

这可能是由于在调用add_action函数之前触发了事件。

例如,我有一个在woocommerce_payment_gateways钩子期间创建的对象,并且独立于该钩子而触发了事件,因此该事件没有对类,实例或操作的引用。我要么必须加载类,创建实例,然后在每次页面加载时对其进行注册,要么必须将方法转换为独立于原始类的全局函数。