投稿日時をあらかじめ指定しておく、いわゆる予約投稿という機能。Yahoo!ブログでもお馴染みの機能で、何気に便利に使っているのですが、この同じ機能が実はWordPressにもあります。
使い方は簡単で、新規投稿画面にある「公開」設定部分の、「すぐに公開する 編集」の「編集」をクリックして公開日時を指定するだけです。
クリックすると日時指定のメニューが出てきます。
ところが困ったことに、ここで日時を設定しても次のような結果になることもしばしば(ってゆーか、毎回・・・)。
なんですとーっ!!??
というわけで、これを解決しなければなりません。
そうしないと、Yahoo!ブログで予約投稿に成功したのにそこからリンクした元ページが予約投稿できないため該当するページがない、という事態になってしまうからです。
そこでググってみたところ、「結構投稿に失敗するお茶目さんであることが知られてい」るらしく、まぁヒットすることすること(笑)
少し詳しく調べてみると、WordPressのディレクトリにあるwp-config.phpにおまじないを記述するなど様々な方法があることがわかりましたが、どうやらまず一番最初に確認するべきは、SSHでリモートログインし、wp-cron.phpが適切な値を返してくるかどうか、であることがわかりました。
そこで早速、そのリンク先にあった情報の通りにSSHでサーバにリモートログインし、次のコマンドを実行してみます。
# wget https://boota.mydns.jp/wordpress-path/wp-cron.php
–2017-01-03 22:51:15– https://boota.mydns.jp/wordpress-path/wp-cron.php
boota.mydns.jp をDNSに問いあわせています… xxx.xxx.xxx.xxx
boota.mydns.jp|xxx.xxx.xxx.xxx|:80 に接続しています… 接続しました。
https による接続要求を送信しました、応答を待っています… 404 Not Found
2017-01-03 22:51:15 エラー 404: Not Found。
ちなみに、IPアドレス直打ちだとこうなります。
# wget https://192.168.xxx.xxx/wordpress-path/wp-cron.php
–2017-01-03 23:13:49– https://192.168.xxx.xxx/wordpress-path/wp-cron.php
192.168.xxx.xxx:80 に接続しています… 接続しました。
https による接続要求を送信しました、応答を待っています… 200 OK
長さ: 0 [text/html]
`wp-cron.php’ に保存中
[ <=> ] 0 –.-K/s 時間 0s
2017-01-03 23:13:49 (0.00 B/s) – `wp-cron.php’ へ保存完了 [0/0]
リンク先にも記述がありますが、この結果から、サーバ内で名前解決ができていないことがわかります(「WordPress は自分自身に対して https リクエストを出」すからです)。
そこで、該当するサーバのIPアドレスである192.168.xxx.xxxをboota.mydns.jpに関連づけるために、/etc/hostsを編集します。
# vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.xxx.xxx boota.mydns.jp(←これを追記)
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
そして上書き保存後、ドメインネームでコマンドリトライです。
# wget https://boota.mydns.jp/wordpress-path/wp-cron.php
–2017-01-03 23:17:55– https://boota.mydns.jp/wordpress-path/wp-cron.php
boota.mydns.jp をDNSに問いあわせています… 192.168.xxx.xxx
boota.mydns.jp|192.168.xxx.xxx|:80 に接続しています… 接続しました。
https による接続要求を送信しました、応答を待っています… 200 OK
長さ: 0 [text/html]
`wp-cron.php.1′ に保存中
[ <=> ] 0 –.-K/s 時間 0s
2017-01-03 23:17:55 (0.00 B/s) – `wp-cron.php.1′ へ保存完了 [0/0]
/etc/hostsへの追記前での実行時とは違い、接続先がローカルになっています。
これでサーバ内での名前解決はどうやらクリアできた模様(リンク先ではローカルホストすなわち127.0.0.1で関係付けるようにありましたが、それでは予約投稿がうまく処理されなかった)。
この状態で再度予約投稿を(数回)試してみたところ、いずれも予約投稿の失敗が返されることもなく、無事に指定時間に投稿が行われることを確認しました。
ちなみにWordPressの予約投稿は、指定日時が来ただけでは投稿されず、「ブログへのアクセスをトリガーにした疑似 cron になってい」るらしく、ダッシュボードの投稿一覧画面をリロードするだけでは予約投稿が行われません(知らずにしばらくの間、何度も投稿一覧画面をリロードしてしまいました 笑)。
なお、WordPressの登録ユーザからのアクセスでもアクセスとみなされるようなので(うちのブログではカウンタこそ回りませんが)、別ウィンドウ(タブ)で自ブログにアクセスして投稿を完了させる必要があります。
←この段階で、予約投稿の記事がブログ内に表示されます。
しかし、アクセスの多いブログならこれでほぼ指定時刻通りに予約投稿が完了するのでしょうけれども、ほとんど人の来ないうちみたいなブログの場合だと、指定時刻周辺でアクセスがなければ、アクセスがあるまで予約投稿されませんし、予約投稿がきちんとされるために自分でその時刻直後にアクセスするのでは、なんかちょっと本末転倒な感じも・・・?(笑)
でも、これで予約投稿が全く機能しないという状況は改善されましたので、ひとまず解決したと見做して、しばらく様子を見てみたいと思います。