これが私のコードです
function cron_add_weekly( $schedules ) {
$schedules['seconds'] = array(
'interval' => 5,
'display' => __( '5 Seconds' )
);
return $schedules;
}
add_filter( 'cron_schedules', 'cron_add_weekly' );
register_activation_hook(__FILE__, 'my_activation');
function my_activation() {
if ( ! wp_next_scheduled( 'my_hook' ) ) {
wp_schedule_event( time(), 'seconds', 'my_hook' );
}
}
add_action( 'my_hook', 'my_exec' );
register_deactivation_hook(__FILE__, 'my_deactivation');
function my_deactivation() {
wp_clear_scheduled_hook('my_hook');
}
function my_exec() {
$value = 91;
update_user_meta($value + 1, 'from_cron', 'updated');
}
ユーザーメタはページを更新した後5秒ごとに更新されるべきです。しかし、クーロンは初めて走るだけです
それで、私はあなたのコードをテストしました、そして、それが一度も実行されることができないと確信しています...そして、これが理由です...
wp_schedule_event
を見ると、関数の先頭にこのチェックがあります。
if ( !isset( $schedules[$recurrence] ) )
return false;
それはあなたが未知の再発でイベントを予定することができないことを意味します。
それでは、あなたのコードに戻りましょう。
cron_schedules
フックを使用)。すべてが良さそうですね。ええ、いいえ、そうではありません。
アクティベーションフックはプラグインのアクティベーション中に発生します。そのため、アクティブ化が実行される前にプラグインは機能しません。だからあなたのカスタム繰り返しは登録されていません。だから...あなたのフックは予定されていません。私はそれをテストしました、そしてあなたのアクティベーションフックのwp_schedule_event
の結果は偽です、従ってイベントは予定されていません。
シンプル - カスタムの繰り返しを使用したい場合は、アクティベーションフックでイベントをスケジュールしないでください。
安全なコードは次のとおりです。
register_deactivation_hook(__FILE__, 'my_deactivation');
function my_deactivation() {
wp_clear_scheduled_hook('cron_every_5_seconds');
}
function add_every_5_seconds_cron_schedule( $schedules ) {
$schedules['every_5_seconds'] = array(
'interval' => 5,
'display' => __( 'Every 5 Seconds', 'textdomain' )
);
return $schedules;
}
add_filter( 'cron_schedules', 'add_every_5_seconds_cron_schedule' );
function schedule_my_cron_events() {
if ( ! wp_next_scheduled( 'cron_every_5_seconds') ) {
wp_schedule_event( time(), 'every_5_seconds', 'cron_every_5_seconds' );
}
}
add_action( 'init', 'schedule_my_cron_events' );
function cron_every_5_seconds_action() {
$value = 91;
update_user_meta( $value + 1, 'from_cron', 'updated' );
}
add_action( 'cron_every_5_seconds', 'cron_every_5_seconds_action' );
PS。 (しかしそれは重要かもしれません) あなたのコードにもう一つ欠陥がありますが、多分それはここに投稿する前にいくつかの編集が原因であるに過ぎません...
あなたのcronが一度だけや何度も走っているかどうかをチェックすることはできません。あなたのイベントアクションはユーザーメタを更新します。しかし、設定される新しい値は常に91です。update_user_meta
を使用するので、そのようなメタは1つだけDBに格納されます。
上記のコードが正しいと仮定して(私はテストしていません)、wp-cronは誰かがそのサイトにアクセスしたときにのみ実行されるので、あなたが考えているようにバックグラウンドで5秒ごとには実行されません。
回避策として、wp-cronを無効にしてから、実際のcronジョブを実装することができます。
これが 良い記事 です。
編集:このように追加してみてください
function cron_every_5_seconds( $schedules ) {
$schedules['every_5_seconds'] = array(
'interval' => 5,
'display' => __( 'Every 5 Seconds', 'textdomain' )
);
return $schedules;
}
add_filter('cron_schedules', 'cron_every_5_seconds');
if (! wp_next_scheduled( 'cron_every_5_seconds')) {
wp_schedule_event(time(), 'every_5_seconds', 'cron_every_5_seconds');
}
add_action('cron_every_5_seconds', 'cron_every_5_seconds_action');
function cron_every_5_seconds_action() {
$value = 91;
update_user_meta($value + 1, 'from_cron', 'updated');
}
?>