wordpressは基本だとそのカテゴリに属する記事の一覧を表示させると
「カテゴリ:」といった文字がカテゴリ名の前に表示されます。
まぁ親切といえば親切なのだけれど、ちょっと野暮ったい気もします。
そこで今回はこの部分を表示されないように変更します。
function.phpを使って設定を変更する
どうしてもphpやその他言語に慣れないと、この辺りを弄ると
エラーが出たり、真っ白になって表示されなくなったりする恐怖にかられるのですが、大丈夫です。そんなに恐ろしいものではありません。
僕も最初はおかしくしてしまって困ったこともありました。
そういう時のためにとりあえず別名で保存しておいてバックアップしておきましょう。
ではいきなりですがサンプルコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//カテゴリ:をとる add_filter( 'get_the_archive_title', function ($title) { if ( is_category() ) { $title = single_cat_title( '', false ); } elseif ( is_tag() ) { $title = single_tag_title( '', false ); } elseif ( is_author() ) { $title = '<span class="vcard">' . get_the_author() . '</span>'; } elseif ( is_archive() ) { $title = post_type_archive_title( '', false ); } return $title; }); |
中身をざっくり解説
まず2行目のadd_filter( ‘get_the_archive_title’, function ($title) {ですが、add_filter()とは
指定したフィルターフックに、関数を登録します。
フィルターは、WordPress が様々な種類のテキストをデータベースまたはブラウザ画面へ送信する前に、それを変更できます。
関数リファレンスより
これだけだとちょっとしっくりきませんが、
先ほどの2行目を見てみると、括弧の中のひとつめ、get_the_archive_title、これはwordpressにもともと設定されているフィルターフックで、呼び出した時に(アーカイブ)ページのタイトルを取得する関数といった感じでしょうか。
ですので、2行目はadd_filterで、get_the_archive_titleの関数をカスタマイズしてくださいよ、という感じです。
if 文で条件分岐
4行目からif文で条件分岐していますが、その4行目は
if ( is_category() ) {
こちらはもし、表示されているのがカテゴリページなら(is_category)
single_cat_title(ページタイトル(カテゴリー名またはタグ名)のこと)を
$title へsingle_cat_title( ”, false );空っぽで代入。
これでカテゴリ一覧の「カテゴリ:」が消えちゃいます。
同じようにis_tag() =タグ一覧、 is_author() = 特定の投稿者の記事一覧
とういう感じで設定します。
今回、ひとつだけ違うのが最後のis_archive()
こちらはカスタム投稿のアーカイブページ用に設定しています。
これだけ、single_tag_title( ”, false );ではなくて
post_type_archive_title( ”, false );となっているところに注意。
ちなみに月別などの表示を消すには
上のサンプルには載っていませんが、年別、月別、日別の一覧で
「年別:」などを消すのを探してみると
WordpressのCode Referenceに本来のget_the_archive_titleを見つけました。
これを見ると例えばis_category()なら本来
$title = sprintf( __( ‘Category: %s’ ), single_cat_title( ”, false ) );
こんな感じ。これが
$title = single_cat_title( ”, false );になっています。
月別をみてみると、本来は
$title = sprintf( __( ‘Month: %s’ ), get_the_date( _x( ‘F Y’, ‘monthly archives date format’ ) ) );
なっていますので、
$title = get_the_date( _x( ‘F Y’, ‘monthly archives date format’ ) );
でOKですよね。
ご参考までに、
1 2 3 4 5 6 7 8 9 10 |
} elseif ( is_year() ) { $title = get_the_date( _x( 'Y', 'yearly archives date format' ) ) ; } elseif ( is_month() ) { /* translators: Monthly archive title. 1: Month name and year */ $title = get_the_date( _x( 'F Y', 'monthly archives date format' )); } elseif ( is_day() ) { /* translators: Daily archive title. 1: Date */ $title = get_the_date( _x( 'F j, Y', 'daily archives date format' ) ); } |
最初のと合わせると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
/*カテゴリ:をとる*/ add_filter( 'get_the_archive_title', function ($title) { if ( is_category() ) { $title = single_cat_title( '', false ); } elseif ( is_tag() ) { $title = single_tag_title( '', false ); } elseif ( is_author() ) { $title = '<span class="vcard">' . get_the_author() . '</span>'; } elseif ( is_year() ) { $title = get_the_date( _x( 'Y', 'yearly archives date format' ) ) ; } elseif ( is_month() ) { /* translators: Monthly archive title. 1: Month name and year */ $title = get_the_date( _x( 'F Y', 'monthly archives date format' )); } elseif ( is_day() ) { /* translators: Daily archive title. 1: Date */ $title = get_the_date( _x( 'F j, Y', 'daily archives date format' ) ); } elseif ( is_archive() ) { $title = post_type_archive_title( '', false ); } return $title; }); |
それと、最後のreturn $title;は忘れないようにしてくださいね。
まとめ
function.phpを触るのは最初は非常に勇気がいるかもしれませんが、
一度挑戦してみると、やっぱり便利ですし、cssだけはなかなか上手くいかない部分もすっとクリアしてくれたりする場合も多いです。
今回の「カテゴリ:」をとるなどのカスタマイズは認知度も高いので
いろいろなところから参考にすることができますが、ちょっと手が空いた時に力を抜いてCode Referenceなんかを眺めて見ると、案外やってることがわかったりして、オススメです。