コラム(WEB制作のポイント)

WEB制作のポイント 2018年6月27日

WordPressの不思議 予約投稿すると記事の順番が入れ替わる

drw-0

WordPressには、投稿記事を予約公開する機能が実装されている。使いこなせば便利な機能で「朝9時に公開」や「新年のあいさつを年明けと同時に公開」など、人手を介さなくても指定の日時になれば自動的に記事を公開してくれる。
この機能、1つの記事を自動公開するには何ら問題はないが、複数の記事を同時に自動公開しようとすると不思議な現象が起きる。それまでは、意図した順序で記事一覧が表示されていたものが、同時公開しようと公開日時を揃えて保存した途端に、記事の表示順が変わってしまうのだ。そのうえ、厄介なことに入れ替わってしまった順番を意図した順序に修正したくてもその方法がないのだ。
このコラムでは、筆者が遭遇した「WordPressの不思議」(バグ?)のひとつを紹介するとともに対処方法を紹介する。

保存した記事の日時のつき方

WordPressでは、記事の情報はデータベースに格納されていて、保存した記事にはいくつかの日付情報が付加される。そのなかで自動公開に関係するのは「post_date」に格納されている日付だ。まずは、保存した記事にどのようなpost_dateが付与されるかをデータベースの管理ツールを使って見てみよう。
試しに3つの記事を「下書きとして保存」で保存した時のpost_dateは以下のようになっている。
(リビジョンなど余計なところは省いている)

drw-1

post_dateは、問題なく投稿した順に付与されており、この状態で管理画面の記事一覧を見てみると、意図した状態に記事が並んでいる。プラグインを入れたりカスタマイズしなければ、基本的にはこの管理画面と同じ順序でWEBサイトにも記事の一覧が表示される。

drw-2

自動公開を設定すると

問題はここからだ、下書きで保存してある記事をそれぞれ別々の日時で予約公開するなら問題は起きないが、同じ未来日時を指定して複数の記事を予約投稿すると、ある症状が発生するのだ。
先ほどの3つの記事を、同じ「6月20日 20:00」に同時公開できるように予約投稿すると、下のキャプチャのように本来「サンプル記事2」は2番目にあるべきところが、一番下に表示されてしまっている。先ほども述べたようにプラグインを入れたりカスタマイズしなければ、基本的にはこの管理画面と同じ順序でWEBサイトにも表示される。この順序では、ニュースのリリース順など内容によっては具合の悪いことが生じる。

drw-3

この時のデータベース内の状態は以下の通りだ。

drw-4

どこが問題だろうか? 赤い線で囲まれている予約投稿日時は正しく「6月20日 20:00」となっている。記事の状態を表すpost_statusも予約状態を表す「future」で問題なし。
他に変わっている部分はどこだろう?

「秒」の「妙」

答えは予約投稿日時の「秒」だ。この「秒」が原因なのだ。(青い線で囲まれている部分)

drw-5

「下書きとして保存」で保存した時のデータベースの状態とよく見比べてもらいたいが、各々の記事の予約投稿日時(post_date)の変化とその大小関係(日時順)を書き出すと次のような状態となる。

下書き保存時のpost_date 予約投稿時のpost_date
サンプル記事1 3 2018-06-13 14:21:25 2 2018-06-20 20:00:30
サンプル記事2 2 2018-06-13 14:23:03 1 2018-06-20 20:00:07
サンプル記事3 1 2018-06-13 14:24:46 3 2018-06-20 20:00:38

すなわち、予約投稿操作を行う場合、「秒」まで指定できないため、予約操作を行った時点の秒が勝手に割り振られ「公開する秒はおまかせ」になってしまっているのだ。厄介なことに予約投稿に限らず、記事を保存する際には秒の指定は一切できず、また、この秒を修正したくても管理画面上にはその機能が存在しないのだ。

次に、このWordPressの厄介な振る舞いを何とかしたいと考え、ネットで調べたいくつかの対策を紹介する。

対策その1)運用でカバーする

最も手っ取り早い方法が「運用でカバーする」だ。本当の意味で全く同じタイミングで公開が必要な状況は稀であろうと思われるので、「分」を1分ずつずらして自動公開の日時を指定することで、前述のWordPressの勝手な割り振りを回避する方法である。この方法だと、次に述べるプラグインの導入や改造などは必要なく、次回の予約投稿から実践できる。

対策その2)プラグインの導入

WordPressには、WEBサイト上での記事の表示順を任意に設定できるプラグインがいくつか公開されている。その中の代表的なものが以下のプラグインだ。

Intuitive Custom Post Order

このプラグインは管理画面の投稿一覧で記事のタイトルをドラッグ&ドロップして順序を入れ替えることができる。これを利用することで前述の「秒」の数値には影響を受けることなく意図した表示順にすることができる。
使い方は、ネットを検索してもらうと数多く紹介されているので、ここではその詳しい説明は省略する。

対策その3)ガッツリ改造する

本来であればWordPressの予約投稿機能として「秒」まで入力を受け付けてくれればいいのだが、どうもWordPressの管理団体にはそのつもりはないようだ。では、「自力で秒の入力欄を設けてしまえ」というのがこの「ガッツリ改造」ということだ。この改造を加えるには、プログラミング能力がそこそこ必要で、改造の方法をここで書き出すと、このコラムが終わらないため、外部のサイトの解説を紹介するに留める。

WordPressの予約投稿時に「秒」まで指定する方法!

ただし、上記のサイトにも記されているが、WordPress自体「秒」が変更されたことのチェックを行っていないため、「秒」だけを修正してもその値は反映されないようである。いったん日時を変えて保存し、その後、改めて自動公開したい日時を正しく設定して保存し直すなど、ひと手間かかるようだ。

これもWordPressの世界

drw-5

今回紹介したような「WordPressの不思議」は、書き出せばキリがないが、筆者はこれらも含めてすべて「WordPressの世界」と割り切っている。WordPressは、世界的にインストール数が多いだけに同じ状態に陥っている人たちが多く、その対策をネット上に紹介してくれている人たちが多数いるおかげで、問題解決につながる場合も多々あるのも事実だ。
今後も機会があれば、筆者が遭遇した「WordPressの不思議」を先駆者の紹介(対策)記事と併せて紹介していこうと思う。
このコラムが、同じ現象にハマってこのページに辿り着いた方の一助になれば幸いだ。

シェアする
  • line

別のコラムにもヒントがあるかも・・・

このコラムに興味があったなら、
こんなコラムも

執筆:福永 忠夫

フレイバーズに、ご相談されませんか?