前述したように、WP-Cron は継続的に実行されませんので、時間通りに実行しなければならない重要なタスクがある場合には、問題となります。これには簡単な解決策があります。システムのタスク・スケジューラーを設定し、必要な間隔で (または必要な特定の時間に) 実行させるだけです。最も簡単な解決策は、ファイル wp-cron.php
に Web リクエストを行うツールを使用することです。
システム上でタスクをスケジューリングした後、ステップがもう一つあります。WordPress は各ページのロード時に WP-Cron を実行し続けます。これはもはや必要なく、サーバーのリソースを余分に使用することになります。WP-Cron は、ファイル wp-config.php
で無効にできます。ファイル wp-config.php
を開いて編集し、以下の行を追加してください:
define( 'DISABLE_WP_CRON', true );
Windows
Windows では、時間ベースのスケジューリング・システムを「タスク・スケジューラー」と呼んでいます。コントロールパネルの 管理ツール からアクセスできます。
タスクをどのようにセットアップするかは、サーバーのセットアップによって異なります。一つの方法は、PowerShell と基本タスクを使用することです。基本タスクを作成した後、以下のコマンドを使って WordPress Cron スクリプトを呼び出すことができます。
powershell "Invoke-WebRequest http://YOUR_SITE_URL/wp-cron.php"
macOS と Linux
macOS も Linux も、時間ベースのスケジューリング・システムとして cron を使用しています。通常、ターミナルからコマンド crontab -e
でアクセスします。コマンドを実行するシステムユーザーによって、タスクは一般ユーザーとして実行されるか、root として実行されることに注意してください。
Cron には従うべき特定の構文があり、以下のパーツから構成されています:
- 分 (Minute)
- 時 (Hour)
- 日 (Day of month)
- 月 (Month)
- 曜日 (Day of week)
- 実施するコマンド
時間セクションのいずれかに関係なくコマンドを実行する場合は、アスタリスク (*
) を使用します。たとえば、時・日・月に関係なく15分ごとにコマンドを実行したい場合は、以下のようになります:
多くのサーバーには wget
がインストールされていて、これは WordPress の Cron スクリプトを呼び出すための簡単なツールです。
wget --delete-after https://example.com/wp-cron.php
--delete-after
オプションがない場合、wget
は、HTTP GET リクエストの出力を保存します。
毎日、毎晩深夜にトリガーされる、あなたのサイトの WordPress Cron への呼び出しは、次のようになります:
0 0 * * * wget --delete-after https://example.com/wp-cron.php