こんばんは。
WordPressでせっかくサイトを作ったのに、予約投稿が指定時間になっても動作しない。。。
そんなことありませんか?
ブログを作ったばかりの頃には多いかもしれません。
この記事ではそんなときの解決法と原因である「wp-cron.php」について解説したいと思います。
予約投稿が動かないのはアクセスがないから
予約投稿が時間通りに動かないのは、ずばりアクセスがないからです。
「あれ?投稿があったらツイートするように設定してたのに、予約時間になってもツイートがない。おかしいな。サイト見てみよう。ん?今投稿された・・・」
こういうことが起こるのもそのためです。予約投稿にはアクセスがあって「wp-cron」が動作することが必要なのです。
wp-cronってなに?
「wp-cron」はアクセスがあると動作してスケジュールをチェックします。そして時間になっても未達成のスケジュールがあれば実行します。
詳しくは、WordPress公式に書いてありますが、wordpressでスケジューリング機能を利用するためのものです。
例えば、サーバ側で用意されたスケジューラー(UNIX系システムにあるCRON(クーロン))が、レンタルサーバなどでは権限の問題で使えない。そういった場合にも予約ができるようにwordpress側で対応しようじゃないか、とそんな粋な機能なわけです。
ただし、アクセスがあるたびに毎回呼び出されてしまうわけですが・・・・。
wp-cronの呼び出しを無効化しよう
アクセスが少ないサイトだと予約投稿が期待通りに動作しない。
逆に、アクセスが多いサイトだと毎回呼び出されて重くなる。
うーん、とても親切な機能ではあるんだけど無効化して代わりにサーバに用意されているcronを設定しましょう。
そうすることでwp-cronが毎回呼び出されることを防ぎつつ予約投稿も可能にできます。
wp-config.phpに記述する
1 2 |
/** wp-cronの停止 */ define('DISABLE_WP_CRON', 'true'); |
これをwp-config.phpに書いてあげます。
これだけだと予約投稿やスケジューリング機能があるプラグインも止まってしまうので注意してください。
サーバのコントロールパネルからcronを設定する
今回はXserverを例に設定しています。
まずはサーバーコンパネにログインして、「Cron設定」をクリックしてください。
次に、「Cron設定追加」をクリックして設定を入力していきます。下の画像は5分毎にwp-cron.phpを実行させる設定にしています。
コマンドは、
1 |
/opt/php-7.3.16/bin/php /home/【サーバID】/【ドメイン】/public_html/wp-cron.php |
と入れてあげます。
Xserverの場合は、「/opt/php-7.3.16/bin/php」のように実行するコマンドパスを書いてあげる必要があります。そのあとに半角スペースを空けて、wp-cron.phpまでのパスを記述します。
これでcronの設定は完了です。
※「Cron結果の通知アドレス」にメールアドレスを設定してもwp-cron.phpの場合はメール通知はありません。「エラーの場合」か「コマンドラインに出力がある場合」のみメール通知されます。
今回はwp-cronとその無効化、サーバのcronの有効化についてでした。
そんなに難しくはないと思うので、みなさんも暇なときに試してみてください。それでは。
この記事へのコメントはありません。