web-dev-qa-db-ja.com

WP_cronは私の行動を引き起こさない

私はマルチサイト用のワードプレスプラグインの中でスケジュールされたタスクで行き詰まっています。どういうわけか私が追加したアクションはトリガーされません。 wp_next_scheduled()を実行すると、タスクはスケジュールされてタイムスタンプを返しますが、アクション自体は実行されずに関数がトリガーされます。

いくつかの手がかりを与えるかもしれない情報:

  • WPMUサイトで実行されています
  • Cronjobはプラグインの一部です
  • 私はOOPアプローチを使っています
  • 私がインポートしているものはカスタム投稿タイプです。

コード例:

class Cronjobs
{
    function Cronjobs()
    {
        add_action('init', array(&$this, 'add_cronjobs'));
    }

    function add_cronjobs()
    {
        add_action('update_properties_daily', array(&$this, 'do_updates'));

        if(!wp_next_scheduled('update_properties_daily') )
        {
           wp_schedule_event( time(), 'daily', 'update_properties_daily');
        }
    }

    function do_updates()
    {
        /* Do updates */
    }
}

本当にこれのいくつかのwizesの助けを借りて使うことができました、ありがとう!


更新

解決策:グローバル関数を作成し、それをカスタムアクションから呼び出します。

オブジェクトを参照している間にカスタムアクションを作成することに多少の不具合があるようです。 カスタムアクションはDBに格納されているので(私が理解している限りでは)、反対されることはありません。インスタンス化されるそしてそのためはそのメソッドを使うことができません。そのために:基本に戻り、グローバル関数を使用します。

1
user47608

オブジェクトへの参照を使用して、クラスの外部からadd_actionを呼び出す必要があります。例:

$cj = new Cronjobs;
add_action('update_properties_daily', array(&$cj, 'do_updates'));
3
windyjonas