質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1363閲覧

WordPressのcronを毎時間で、ただし複数処理をズラしたい

gorimaz

総合スコア26

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2020/11/28 07:48

編集2020/11/28 07:49

###実現したいこと
WordPressのcronで毎時間の処理を実行したいです。

ただし処理AとBがあり、

A は「12:00、13:00時、、」という毎時間に実行
B は「12:30、13:30時、、」という毎時間に実行

ということを実現したいです

※正確な時間でなくてもいいのですが、AもBも重い処理なので数分ズラして実行したいという感じです
※ABDCEFG…など10個くらいあります。

###調べたこと
まず公式リファレンスにはhouryで毎時間という方法はありましたが、実現したいことの方法はありませんでした

php

1if ( !wp_next_scheduled( 'my_hourly_event' ) ) { 2 wp_schedule_event(time(), 'hourly', 'my_hourly_event') 3}

またこちらのページでは次のような指定時間の実行がありましたが、こちらもやはり実現したいことの方法はありませんでした

php

1if ( !wp_next_scheduled( 'my_auto_function_cron' ) ) { 2 date_default_timezone_set('Asia/Tokyo'); 3 wp_schedule_event( strtotime('2017-06-30 02:00:00'), 'daily', 'my_auto_function_cron' ); 4}

###代案
直接てきに実現できなければ代案として、普通に公式リファレンスにあるようにhouryで実行しつつ、Aは12:00にコードを書いて、Bは12:30にコードを書いて、という風にすればギリいけるかと思ったのですが、それでも回数が重なるうちにこの30分のズレが近づいて、いつかほぼ同時に実行されるようなこともあったりしそうです。

できれば30分のズレは保証したいのですが、そのような方法ありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

wp_schedule_eventの第一引数にstrtotime('+ 30 minutes')を渡すなりして
初回処理の時間をずらして登録してやればいいだけです

基本的にはこの第一引数で指定した時間を初回実行として指定した間隔で実行します

WordPressのcronがユーザーのアクセス時に走るもので
正確な時刻に実行されないので少しずつズレていくんじゃないか
という心配をしているようですが、まあないと思います

イベント実行毎にwp_reschedule_eventで次の実行時間を決定するのですが
wp-cron.phpではこの関数を実行時間が来ていた場合だけ実行するので実質

php

1$timestamp = $now + ( $interval - ( ( $now - $timestamp ) % $interval ) );

のように予定時間からの超過時間分を差し引いて次の実行時間を決定するので
数分までズレが蓄積するということはまずないはずです

投稿2020/11/29 08:40

編集2020/11/29 08:42
KazuhiroHatano

総合スコア7802

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gorimaz

2020/11/29 08:45

なるほど納得のいくご説明でした。ありがとうございます。
guest

0

毎日動かすならこんな感じでどうか。

$date1 = new DateTime( current_time( 'Ymd 12:00:00' ) ); wp_schedule_event( $date1->format( 'U' ), 'daily', 'my_event_A' ); $date2 = new DateTime( current_time( 'Ymd 13:00:00' ) ); wp_schedule_event( $date2->format( 'U' ), 'daily', 'my_event_A' ); $date3 = new DateTime( current_time( 'Ymd 12:30:00' ) ); wp_schedule_event( $date1->format( 'U' ), 'daily', 'my_event_B' ); $date4 = new DateTime( current_time( 'Ymd 13:30:00' ) ); wp_schedule_event( $date2->format( 'U' ), 'daily', 'my_event_B' );

投稿2020/11/29 06:18

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gorimaz

2020/11/29 08:44

確かに。すべての時間で別のイベントにすればいいですね。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問