WordPressのパーマリンクに日付を入れると個別投稿ページ(single.php)として認識されない

はてなブログからWordpressに引っ越しをした際にパーマリンクの構造可能な限り引き継ぎされる様にしようと思い、パーマリンクの設定を

/entry/%year%/%monthnum%/%day%/%hour%%minute%%second%

としたところがすべての始まりだった。まず記事がアーカイブページとして認識されてしまう。具体的にはWordpressのテンプレートでいうところの個別投稿ページのテンプレート(single.php)が利用されずに、アーカイブページのテンプレート(archive.php)が利用されてしまう。
加えて記事ページ表示時に処理を行う様なプラグインを導入しても、そもそも記事ページがアーカイブページとして認識されているのでそのプラグインが正常に動作しない。

いろいろ調べてみたところWordpressのフォーラムで以下の様な投稿を見つけた

ここで行われた修正によって、パーマリンクで確実にユニークネスが維持できる様にしましょうという方針で行われた修正の様であった。つまりは、上で自分が設定した様な年月日時分秒の組み合わせの場合同日同時間に投稿が複数できることは起こり得ることなのでアーカイブページとして判断する方針になった様であった。

一方理由はわかるものの自分としては先の引越し元からのパーマリンクを維持したいという目的もあったので、さて困ったということでいろいろ調べてみたところ以下の様な投稿を見つけた。

行われた修正のジャッジを改めて行ってアーカイブページの判定になっているフラグを下ろし逆に個別投稿として認識される様にフラグを上げるというものと理解したので倣って以下の様にfunction.phpに処理を加えた。

少し手を加えていて

$wp_query->is_singular = true;

というフラグも上げている。リファレンスにある様に、個別の投稿を表示中であるかを判定するためのフラグなのでこちらもtrueにしている。
こうすることでTop 10 – Popular posts plugin for WordPressといったプラグインでも記事表示回数をカウントする処理も動く様になった。

大分調べるのにパワーを使ってしまった。最初何故プラグインが動かないだろうというところからプラグインが出力するJSONの中の記事IDが入っていないことに気づき、プラグインのリポジトリの

を見て、そもそも記事ページと思っていたものがアーカイブページとして表示されていることに気づき、Wordpressのコミュニティーを調べ、5.4.1へのバージョンアップで発生している事象であることを知って、そこからfunction.phpでフラグを定義し直せることを知り、更にsingularというフラグも併せて調整すればよいことに気づいたのでした。

時間はかかったがすっきりした。

(Visited 13 times, 1 visits today)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です