WordPress予約投稿の仕組み
WordPressの便利な機能の一つでもある「予約投稿」、前もって記事を書いて「予約投稿」にしておけば、指定した日時にWordPressが自動的に公開してくれるというというものです。
個人的にはよく使っている機能なのですが、今まで知らなかった予約投稿のカラクリを知ることとなりました。
先日、予約投稿を設定した記事が投稿されていないとう現象が起こったサイトがあります。
WordPressの予約投稿はwp-cornというスケジュールイベントを実行する機能を使うことで行われています。これは、サイトへのアクセスをトリガーに実行されるため、アクセス数の少ないサイトでは実行されません。
つまり、アクセス数の少ないサイトでは、予約投稿ができないということです。
Basic認証が原因になる場合も
いやいや、アクセス数はある程度あるよ、という場合はBasic認証を使っていませんか?Basic認証でアクセスに制限をかけていると、wp-cornがちゃんと動きません。
Basic認証を解除するか、解除できないのであれば、wp-config.phpにBasic認証中も予約投稿を実行させるコードを追記します。
define('ALTERNATE_WP_CRON', true);
ただし、この方法は不安定になる要素を含んでいますので、注意してください。
サーバーエラーが起こることもあるので、個人的には、あんまりオススメしないです💦
その他、WP Super Cacheなどキャッシュ系プラグインを使っている方も、それが原因になっていることがあるようです。
さくらサーバーでSSLを導入したケースも注意
コムニカのクライアントは、さくらサーバーを使うケースがほとんどなのですが、さくらサーバーでSSL化した場合も予約投稿ができないことがあります。
SSL化した際にさくらサーバー用のコードを.htaccessに記述しているとおもますが、以下の1行をそこに追記すると良いようです。
RewriteCond %{REQUEST_URI} !^/wp-cron.php$
<IfModule mod_rewrite.c>から</IfModule>の間に追記します。
こんな感じになります。
<IfModule mod_rewrite.c> RewriteEngine on /*ここから追記*/ RewriteCond %{REQUEST_URI} !^/wp-cron.php$ /*追記終わり*/ RewriteCond %{HTTP:X-Sakura-Forwarded-For} ^$ RewriteRule ^(.*)$ https://ドメイン名/$1 [R=301,L] </IfModule>
WP Missed Schedule Postsで解決する場合も
アクセス数も少ない、ファイルも触りたくない、という方には、WP Missed Schedule Postsというプラグインを使う方法もあるらしいです。
件のWebサイトは、それまで全く力を入れておらずWordPressで作ったものの「ほぼ放置」状態。「とりあえず作ってある」だけの状態のホームページは結構存在しています。今回「事件」が起こったのもそんなサイトで、予約投稿ができなかった原因はアクセス数ではないかなぁ、と思います。
ちょっと悲しい……。💧