WordPressのパーマリンクに年月日が含まれているとarchive扱いとされる。
気付いた時に応急処置として実施したのはarchive.phpの先頭にこのように追加した。
<?php
$count = 0 < get_query_var('posts_per_page') ? $wp_query->found_posts : $wp_query->post_count;
if($count == 1) :
get_template_part('single');
else:
get_header();
?>
省略したけど、archive.phpの最終行にちゃんとend if;を書くんやで。
これは何がいけないかというと、この方法で表示した記事が「投稿」ではなく「アーカイブ」のままになることだ。
投稿したのに「投稿」ではないとはこれいかに。
「投稿」ではなく「アーカイブ」となることで、Wordpressで扱える関数が変わる。
is_singleで扱うことはできず、is_archiveで扱うことになる。
これでは1件の投稿を指定したいのか何らかのアーカイブを指定したいのかと区別がつかなくなってしまう。
(…色々こねくり回せば区別はつくが…スマートじゃないよねって話)
というわけで、archive.phpは元に戻してfunction.phpへ以下のように追加した。
/** パーマリンクにyyyymmddhhmmが含まれた場合は投稿ページ扱いにする */
function hm_permalink($wp_query) {
$q = (object)$wp_query->query_vars;
// 年月日+時分まで含まれているパーマリンク
if(!empty($q->year) && !empty($q->monthnum) && !empty($q->day) && !empty($q->hour)&& !empty($q->minute)) {
// アーカイブから投稿へ変更する
$wp_query->is_single = true;
$wp_query->is_singular = true;
$wp_query->is_archive = false;
}
}
add_action('parse_query', 'hm_permalink');
前提として投稿とはそのパーマリンクで1件に絞られるべきである。
でなければ、1件の記事として区別ができないからだ。
そのためにWordpressは投稿IDを設定しろとかなんとか言ってくる。
「年」「月」「日」だけでは同じ日に2件以上投稿すると区別がつかないので、今回は「時」「分」までをパーマリンクに設定した場合とした。
if(!empty($q->year) &&
!empty($q->monthnum) &&
!empty($q->day) &&
!empty($q->hour) &&
!empty($q->minute)) {
ここまでパーマリンクに設定した時だけ「投稿」と設定することにした。
アーカイブから投稿へ変更するのは簡単。
$wp_query->is_single = true;
$wp_query->is_singular = true;
$wp_query->is_archive = false;
wp_queryの中のis_singleをtrueに、is_archiveをfalseに設定する。
「投稿であってアーカイブでない」という状態をWordpress的に認識するのはここだ。
is_singularもtrueに変更しているが、これは通常「投稿または固定ページ」の場合にtrueを示す。「何かしら記事の時」にis_singleとis_postがtrueと書かずともis_singularがtrueだと指定するだけでよい。
っていうか、これOGP設定するのに使ってるからOGP設定ずっと狂っとんのよ。
最後にこれをフックする。
add_action('parse_query', 'hm_permalink');
フックする場所はparse_query。is_XXXを設定している箇所となる。
以下の記事によると、parse_queryですべてのis_変数を設定して「このページが何なのか」を特定している…とのこと。
え。ごめん、CODEXちょっと何言ってんのか分からなかったんだけど…と思ったら2020年の記事だった。CODEXって日本語版なくなってから読む気失せたんよね。
どうして2020年の私はこんな応急処置をしたのか(仕事中だからだよ。逆に仕事中に何してんだよ)。
ともあれ、これで健全に「投稿のつもり」が「投稿である」とWordpressに認識されることとなった。
Wordpress側としては「投稿に日付付けてんじゃねぇよ」ということなのだろうが…日記だからつけるやろがい。というのはもしかして日本人特有の何かなのかもしれない。