以前、サーバ負荷軽減のためにwp-cron.phpを停止してサーバのcronで実施するという処置をしましたが、マルチサイト機能を有効にしているときちんと動いていないようでしたので再設定してみました。
マルチサイト機能とは
WordPressのマルチサイト機能とは、通常WordPressは1つのブログしか運営できないところを複数のブログを運営できるようにする機能です。詳しくは「WordPressのマルチサイト機能でサブディレクトリ型とサブドメイン型を共存させる」で紹介していますので参考にしてください。
wp-cron.phpの停止させる方法
wp-cron.phpを停止させるやり方はwp-config.phpに記載するだけなので簡単ですが、停止したままだと不具合が生じるので別途定期的に動作させる必要があります。
wp-config.phpに追記する
wp-cron.phpを停止させるにはwp-config.phpに以下を記述します。どこでもかまいませんが「編集が必要なのはここまでです ! ~」よりは上である必要があります。
define('DISABLE_WP_CRON', true);
サーバのcron設定
wp-config.phpを停止しても定期的に動作させる必要があります。そのためサーバに備わっているcronを使用します。有料のレンタルサーバであればcronが使えるようになっていることが多いので使い方はサーバ運営に確認してください。
動作させるシェルスクリプトの作成
定期的に動作させるシェルスクリプトを作成します。前回は、wp-cron.phpを直接実行していましたがこれだとマルチサイト機能で作成したサイトのwp-cron.phpが動作していることにはならないようでした。
そこで、wgetを使用して各サイトのwp-cron.phpをリクエストするようにしたところきちんと動作するようになりました。作成したシェルスクリプトの例は以下です。
※シェルスクリプトの設置場所を「/home/[ユーザ名]/cron/wp-cron.sh」とします。
#!/bin/sh cd /home/[ユーザ名]/cron wget http://site-domain1/wp-cron.php -O result1 wget http://site-domain2/wp-cron.php -O result2
サーバのcron設定
上記で作成したシェルスクリプトをcronに登録します。登録の仕方はレンタルサーバによって変わりますのでサーバ運営に確認してください。私は、アクセスの多いサイトは1時間に1回動作させ、アクセスの少ないサイトは2時間に1回動作させるよう設定しました。あまり感覚が短いとサーバ負荷になりますが、長いとプラグインなどで不具合を起こすことがありますので、様子を見ながら設定してみてください。
まとめ
WordPressのマルチサイト機能は便利ですが色々と無理があるようです。正常に動作しないプラグインなどもあるので、将来的には分けていたほうが良いのかもしれません。