クラス定義の外でwp_schedule_event
を使用してプラグインをアクティブ化するときにカスタム間隔を指定してクーロン・タスクregister_activation_hook
を追加すると、カスタム間隔がまだ認識されないため機能しません。
register_activation_hook(__FILE__, array('Test', 'test_plugin_activated' ) );
register_deactivation_hook(__FILE__, array('Test', 'test_plugin_deactivated' ) );
add_action('plugins_loaded', array ( Test::get_instance(), 'plugin_setup' ) );
class Test
{
protected static $instance = NULL;
public static function get_instance()
{
if ( null === self::$instance )
{
self::$instance = new self;
}
return self::$instance;
}
public function plugin_setup()
{
//init stuff...
}
public function __construct()
{
add_filter( 'cron_schedules', array($this, 'custom_cron_schedule') );
}
public function custom_cron_schedule( $schedules )
{
$schedules['minute'] = array(
'interval' => 60,
'display' => __( 'Once per minute' )
);
return $schedules;
}
public static function test_plugin_activated()
{
wp_schedule_event( time(), 'minute', 'MINUTE_EVENT') ;
}
public static function test_plugin_deactivated()
{
wp_clear_scheduled_hook( 'MINUTE_EVENT' );
}
}
クラスコンストラクター内でwp_schedule_event
を使用したプラグインのアクティブ化でカスタム間隔を指定してregister_activation_hook
を指定してcronタスクを追加すると、add_filter('cron_schedules', ...);
への呼び出しも一連のイベントで起動されるので機能します。
add_action('plugins_loaded', array ( Test::get_instance(), 'plugin_setup' ) );
class Test
{
protected static $instance = NULL;
public static function get_instance()
{
if ( null === self::$instance )
{
self::$instance = new self;
}
return self::$instance;
}
public function plugin_setup()
{
//init stuff...
}
public function __construct()
{
register_activation_hook(__FILE__, array($this, 'test_plugin_activated' ) );
register_deactivation_hook(__FILE__, array($this, 'test_plugin_deactivated' ) );
add_filter( 'cron_schedules', array($this, 'custom_cron_schedule') );
}
public function custom_cron_schedule( $schedules )
{
$schedules['minute'] = array(
'interval' => 60,
'display' => __( 'Once per minute' )
);
return $schedules;
}
public function test_plugin_activated()
{
wp_schedule_event( time(), 'minute', 'MINUTE_EVENT') ;
}
public function test_plugin_deactivated()
{
wp_clear_scheduled_hook( 'MINUTE_EVENT' );
}
}
カスタムの時間間隔でシナリオ1または2を正常に機能させるにはどうすればよいですか。
どちらのシナリオも、デフォルトの組み込み間隔以外のカスタム間隔時間で失敗します。
チャットでこれについて説明したように、1つの(ワイヤード)ものがありました。
フック名はアンダースコアを含んではいけません(!)。
命を救う側に留まるために、同様にそれを小文字にします。