Morley.JP

身のまわりのいろんなことを、できる範囲でちょっとだけ良くしていくブログです。

たった1行の修正でCoreServerでもWordPressの予約投稿を使えるようにしてみた

      2015/10/29

無印良品のアドベントカレンダー 1st © by yto

今更ながら・・・なんですけど、つい先日初めてWordPressの予約投稿を試してみました。
結果は・・・見事に失敗です。

だけどちょっと待てよと。
世界でもっとも使われているオープンソースCMSのデフォルトの機能が動かないわけがない。きっと簡単な解決策があるはずだ!!

ということで、調べてみたらサクッと解決しましたので、忘れないうちに書き残しておきます。

<目次>

そもそも予約投稿機能とは

Clock © by Dave Stokes

最近使い始めたばっかりのくせに、というご批判はごもっともですw
ですので、超簡単に言いますと、予約投稿というのはWordPressに限ったことではないんですが、あらかじめ書いておいた記事を、指定した日時になってから公開するように設定できる機能なんです。最近のブログシステムにはけっこう備わっているみたいですね。

記事書いたんならすぐ公開すれば良いのに、とお思いの方にはこの機能は必要ないと思いますが(僕もそうでした)、例えば

  • 書き溜めておいた連載記事を定期的に公開したい
  • ターゲットとなる読者層に最も効果的にリーチできる(届く)であろう時間帯を狙って公開したい

なんていうときに役に立つわけです。
どうしてそんなことしたいのかということについては、また改めて別の日に書こうと思いますが、ザックリ言うと、アクセスアップのためにはそうした方がいいことがあるからです。

WordPressの予約投稿のしくみ

例によってGoogleで解決策を探したところ、こんな記事をみつけました。

WordPressの予約投稿が失敗する件の解決方法 | Weblogy
厳密には、「その日付以降に誰かがアクセスしたとき」です。サーバーのCronを使っているわけではなく、内部プログラムが指定時刻に HTTP リクエストを発行する仕組みだそうなので …

なるほど~、そうだったんですね。でもこの記事に書いてあることを試すのはちょっと敷居が高そうだな~、と思って別の記事を検索すると、ありましたありました。

WordPress 予約投稿が失敗する不具合の修正 | 6w6a’s blog
その不具合の一つの原因はcron.phpのタイムアウト設定にありました。 …

これならできそうなので、以下試してみました。

バージョン3.3.1での修正方法

上記で参考にした記事はバージョン2.9のものでしたので、cron.phpの該当の行を見てみても修正個所は見つかりません。
そこでコード内を検索してみると、僕のサイトの場合は248行目にありました。

248
	wp_remote_post( $cron_url, array('timeout' => 0.01, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true)) );

そこでこいつを

248
	wp_remote_post( $cron_url, array('timeout' => 10, 'blocking' => false, 'sslverify' => apply_filters('https_local_ssl_verify', true)) );

という具合に0.01秒だったタイムアウトを10秒に変更してみました。

さてさて、手始めにこの記事自体を予約投稿してみましょうか。
せっかく書いたんですけど、成功しなかったらこの記事はお蔵入りですねw

追記:
できました、できましたよ~!
daceloさん6w6aさんはじめ多くの先人たちの知恵に感謝です!!

 - IT, お悩み解決系 , ,