私は毎日のwpスケジュールイベントを持っています。
ユーザーがサイトにアクセスしたとき、およびスケジュール時間が経過したときに起こることを私は知っています。
私が今日の午前12時にそれを始めたなら、そして明日最初の訪問者が明日午前1時20分に来るならば、そのイベントは明日午後1時20分に起こります。
毎日、午前1.20以降または午前12時以降に発生しますか。
wp-cron は厳密なスケジュールで実行されないため、しばしば擬似cronと呼ばれます。誰もそのサイトを訪れなければ、それは実行されません。 wp-cronイベントを12時間ごとに実行するようにスケジュールした場合、 多くても 12時間ごとに実行されます。ただし、サイトのトラフィックが非常に少ない場合は、実行に12時間以上かかることがあります。
12時間ごと、または毎日同じ時間にイベントを開催する必要がある場合は、WordPress以外で使用する必要があります。そのための一般的な方法としては、システムタスクスケジューラ(Linuxでは、これは通常「cron」と呼ばれます)またはEasyCronのようなサードパーティのサービスを使用することがあります。
Linuxサーバ(はるかに一般的なホスティング環境)にいると仮定して、このような小さなシェルスクリプトを作成します。
#!/bin/bash
curl http://yoursite.name.com/wp-cron.php >/dev/null
これはあなたのサイトのwp-cron.phpページをロードするために "curl"コマンドを実行し、そして直ちに(/ dev/nullに出力をダンプすることによって)結果を無視するでしょう。あなたはページが持っているかもしれない少しの出力についても気にしません、そして実際には通常少しの出力もありません。あなたはただページがロードされていることを確認したいだけです。
それから、crontabに次のような行を追加します( "crontab -e"はデフォルトのエディタ、おそらく vi でcrontabファイルを開きます)。
0 0,12 * * * /home/user/touch-site.sh
(明らかに、スクリプトを置く場所にファイルの場所を変更してください。また、 "chmod 700 touch-site.sh"を実行してスクリプトが実行可能であることを確認してください。)
この例では、毎日、正午と真夜中(サーバー時間)にサイトにアクセスし、wp-cronスクリプトを実行します。このファイルのしくみの詳細については、 "man crontab"を実行してください。
この質問に答えるには
@sumitよろしいですか。私の友人の一人は、今日それが翌日の午後1時20分に起こるのであれば、午前12時ではなく午後12時の後に起こると言いました
どのように動くのか:
現在のタイムスタンプ、つまり月曜日の午前12:00を使用してイベントをスケジュールします。
wp_schedule_event(time(), 'daily', 'my_schedule_hook');
誰かが月曜日の午前1時20分にこのサイトにアクセスしました。
WPはこのコードを呼び出す
if ( $schedule != false ) {
$new_args = array($timestamp, $schedule, $hook, $v['args']);
call_user_func_array('wp_reschedule_event', $new_args);
}
wp_unschedule_event( $timestamp, $hook, $v['args'] );
/**
* Fires scheduled events.
*
* @ignore
* @since 2.1.0
*
* @param string $hook Name of the hook that was scheduled to be fired.
* @param array $args The arguments to be passed to the hook.
*/
do_action_ref_array( $hook, $v['args'] );
ここでは、同じタイムスタンプを使用するwp_reschedule_event()
関数を呼び出しているので、次のスケジュールは火曜日の12:00 AMではなく1:20 AMになります。それから、スケジュールアクションフックを呼び出します。
よくある間違いは、functions.php
で直接wp_schedule_event()
を呼び出すので、新しいタイムスタンプごとにWPイベントをスケジュールすることです。正しい方法は、スケジュールがあるかどうかを確認してから作成することです。
$my_schedule_hook = wp_next_scheduled('my_schedule_hook');
if (!$my_schedule_hook) {
wp_schedule_event(time(), 'daily', 'my_schedule_hook');
}
したがって、スケジュールがまったくないときに初めてif
ブロック内に入るだけです。それでも、あなたはこのプラグインですべてのスケジュールを見ることができます WP Crontrol