BLOG
archive.phpが認識されなかった
2019/12/02 [Mon] WEB時々書いているWEBの備忘録、自分用に役立っているので困ったことがあった時にはできるだけメモっておくことにします。
大体毎回同じところでつまづくという。成長しろよ自分…。
さて、今回はWordPressのテンプレートで「archive.php」を作ってアップしているにも関わらず、全く認識されず「index.php」が表示されて「何でやぁぁ〜!」としばらく格闘してしまいました。
オチはとっても単純。
「functions.phpにアーカイブページを作成する、という記述をしていなかった」
だけでした。
以下、昔買ったWordPressの入門本に載っていたのをそのまま引っ張ってきたやつだと思いますが転載。
function post_has_archive( $args, $post_type ) {
if ( ‘post’ == $post_type ) {
$args[‘rewrite’] = true;
$args[‘has_archive’] = ‘blog’; //スラッグ名
}
return $args;
}
add_filter( ‘register_post_type_args’, ‘post_has_archive’, 10, 2 );
functions.phpはいつも大体使い回していますが、不要なものを削除していた時に間違ってコレも一緒に消してしまったようです。
ていうか普通の投稿(カスタム投稿タイプでない)ぐらい、わざわざfunctions.phpで宣言しなくても、アーカイブ使えるようにしといて欲しい…。
まぁ「設定→表示設定」で固定ページを指定する方法もありますが、これはこれで何かと手間が増えて面倒だし…(固定ページを無駄に増やしたくないので)
パーマリンク設定にも注意
ちなみに上記に気付いてfunctions.phpを修正した後も、archive.phpが認識されませんでした。
こちらは何となくパッと気付いてすぐに直したのですが、パーマリンク設定のカスタム構造に上記と同じスラッグ名を含めていたのを削除したら、ようやくarchive.phpがアーカイブページとして認識されました。
↓
「blog」を削除
/%year%-%monthnum%-%day%-%hour%%minute%%second%
ついでにcurrent設定の話
件のサイトでは投稿ページをブログとして使用しています。
グローバルメニューはWordPressの「外観→メニュー」で作ってアーカイブページを「カスタムリンク」で「ブログ」と記述してメニューに追加していますが、これだと当然アーカイブページ以下(投稿ページ、カテゴリーアーカイブ等)のページでは、メニューにcurrentクラスが付与されません。
これってどうやるんやったっけ〜?と過去の事例をチェックするもすぐに見付けられず。
調べているとjQueryでURLを取得して云々…といった方法も出てきますが、せっかくWordPressの標準メニュー機能を使っているのだし、あまり無駄なことはしたくない。
少し考えて、ふと「single.phpもcategory.phpもブログのページでしか使わない」ことに気付き、single.phpとcategory.phpのページのcontainerブロックにcssを付与することにしました。
:
<ul class=”global”>
<li>トップページ</li>
:
<li class=”blog”>ブログ</li>
↑メニュー設定のオプションでcssクラス付与
</ul>
//cssを以下のように記述
.global li.current-menu-item a,
.single .global li.blog a {
currentの設定
}
こうすれば、single.phpのテンプレートが読み込まれている時だけcurrent設定のcssが適用されることになります。