【WordPress】カテゴリーページに説明文を表示させる方法とカテゴリータイトルタグの編集

カテゴリーページの説明文を表示させる方法

WordPressのカテゴリーページは実はSEO的に個別記事より強く上位表示しやすいのでそのカテゴリーページにも色々とユーザーのために文章を書いてあげた方がよいと思います。

WordPressでカテゴリーページを作る画面です。

ここで説明欄にカテゴリーページの説明文を記述していきます。テーマによっては説明文を表示するテーマもありますが表示しないテーマの方がまだ多い気がしますね。

表示しないテーマだとこんな風に、カテゴリに投稿された記事の一覧だけの画面になっちゃいます。

なのでこの説明文を出力するようにソースコードを編集する必要があります。

カテゴリページ用のソースコードを修正する

編集するPHPソースファイル
>category.php

テーマによってはarchive.phpを使ってるかもしれないので、どのファイルを編集するかはよく見てください。

カテゴリーページに説明文を表示させる以下のコードを任意の場所に追記します。

<?php if(category_description()):?>
<?php echo category_description(); ?>
<?php endif;?>

またこれだけだと、カテゴリーページが数ページにわたった時に、2ページ目以降にも同じ説明文が表示されると具合が悪いです。(長文の場合)

例えばこのページはプログラミングスクールのテックアカデミーについてまとめたカテゴリーページです。
テックアカデミー

説明文が超長くて、その下にカテゴリーに属している個別の投稿記事の一覧が表示されています。さらに下へ行くと「ページ送り」が見えますよね。

このカテゴリーページは4ページはあります。全部のページに長文の説明文が表示されてると、SEO的には重複コンテンツになる可能性があるのであまりよくないです。2ページ目以降には説明文を表示させないようにしたいと思います。以下のようにします。

<?php if(!is_paged()):?>
<?php if(category_description()):?>
<?php echo category_description(); ?>
<?php endif;?>
<?php endif;?>

is_paged()関数は1ページ目ならfalseを返し2ページ目以降だったらtrueを返す関数です。

これでカテゴリーページに説明文を表示させることができるのですが、デフォルトではHTML構文が使えません。hタグやspanタグなどを使ってみて反映されるかチェックしてみてください。もしHTML構文が使えないなら以下のソースコード修正が必要となります。

カテゴリーの説明文にHTMLを使えるようにする

ここでfunctions.phpファイルを修正していきます。
以下の記述を追記します。

//カテゴリー説明文でHTMLタグを使う
remove_filter( 'pre_term_description', 'wp_filter_kses' );
//カテゴリー説明文から自動で付与されるpタグを除去
remove_filter('term_description', 'wpautop');

追記といいますが、テーマによっては追記ですし、テーマによっては?>の上に記述しないといけないですね。

その1のように?>で終わってるファイルなら、その上に追記です。その2のように無い場合はそのまま追記。

説明文にはpタグも含めてHTMLを記述していきましょう。
これでカテゴリーページに綺麗に自分が書いた説明文を表示させることができました。

ところがどっこい…

ウィジェットのカテゴリーのaタグtitle属性を消す

説明文をカテゴリページに表示させると同時に不具合が発生します。実際は不具合ではないのですが気になる事です。

それはウィジェットのカテゴリー部分に表示される各カテゴリーページへのリストのaタグのtitle属性に、説明文がドバッと入っちゃうことがあります。

これは気持ちが悪いので、このtitle属性を消します。

修正ファイル
functions.php

以下を追記。

function my_widget_categories_args( $cat_args ) {

    $cat_args['use_desc_for_title'] = 0;

    return $cat_args;
}
add_filter( 'widget_categories_args', 'my_widget_categories_args' );

WordPressの内部ではwp_list_categories() でリンク付きカテゴリリストをHTML生成しています。

この関数への引数をいじってあげればtitle属性を出力しないようにできます。引数はwidget_categories_argsフィルターフックでカスタマイズ出来ます。

これの引数の連想配列$argsで’use_desc_for_title’というパラメータがあり、値が1なら挿入、0なら挿入しないという設定です。なので0に設定しています。

このコードを追記してもダメな場合、テーマ独自にカテゴリリスト生成してる場合があります。その時はソースコードを検索やgrepで探せばよいと思います。

例えば以下のような記述があればuse_desc_for_title=0で指定してあげましょう。

echo wp_list_categories('use_desc_for_title=0&orderby=order&style=list&title_li=&exclude='.$exclusion.'&hide_empty=0');

これでやっと、説明文をカテゴリページへ出力する方法が完了しました。

カテゴリーページのタイトルタグの編集

WordPressのカテゴリーページのタイトルタグを編集する方法を記述しています。

まずサイトのタイトルタグに関してSEOの視点から書いた記事がありますので参考まで。
Googleが推奨するタイトルタグの中身

本来はこれにならってタイトルタグを決定したいところなのですが、Wordpressだと適用しているテーマによって自動的にタイトルタグの中身が生成されるのでなかなかこのようにならない場合があります。

またWordpressのバージョンによっても異なるので難しい部分です。

WordPressでカテゴリーを作ると、当ブログのようにウィジェットのカテゴリーには以下のように表示されます。

一方で、カテゴリーページへアクセスしてみるとタイトルタグは以下のようになります。例えば「Wordpress」のカテゴリページのタイトルは「Wordpress」です。

SEOや検索ユーザーがタイトルを見てきてくれることを考えると、このウィジェットに表示させるリンク文字は「Wordpress」のままにしつつ、カテゴリーページタイトルは「Wordpressカスタマイズ方法Tips」といった文章にしたいわけです。

カテゴリーの編集でカテゴリー名を長い文章にしちゃうと、ウィジェットカテゴリーにも長い文章が出ちゃってよろしくないでしょうし。

これを実現する方法を紹介します。

WordPressやテーマが古い場合…

※まずWordpressのバージョン4.4からタイトルを生成する関数が変わったらしく、またテーマによっては古いスタイルのソースコードのままになっていてタイトルを生成してることもあるのでじっくり取り組まないとうまくいきません。

例えばタイトルタグを書くところでwordpressのheader.phpに以下のような記述をしている古いサイトはよくあるかもしれません。

<?php if(is_home() && !is_paged()): ?>
<title><?php bloginfo('name'); ?> | <?php bloginfo('description'); ?></title>
<?php else : ?>
<title><?php echo trim(wp_title('', false)); ?><?php if (wp_title('', false)) : ?> | <?php endif; ?><?php bloginfo('name'); ?></title>
<?php endif; ?>

//とか


<?php if(is_home() && !is_paged()): ?>
<title><?php bloginfo('name'); ?></title>
<?php else : ?>
<title><?php echo get_the_title(); ?> | <?php bloginfo('name'); ?></title>
<?php endif; ?>

最新だとheader.phpに以下の記述をするだけで、SEOも意識したタイトルタグを自動で生成してくれるようになりました。

<title><?php echo wp_get_document_title(); ?></title>

例えば設定で以下のようにすると

トップページタイトルタグ サイト名 – キャッチフレーズ
個別の記事のタイトルタグ 記事タイトル – サイト名

と出力されます。

なので古い記述の<title>~~</title>が残ってたら上記(wp_get_document_title)に差し替えしちゃえばよいと思います。wp_title関数は一時期非推奨になってたので今後は減っていくでしょう。

WordPressのタイトルタグが2つ表示される不具合

ちなみにソースコードを見るとタイトルタグが2重に出力されてしまう場合があります。これはheader.phpに記述したwp_title()関数でのタイトル出力と、wp_head()関数内でのタイトル出力がされることによって発生する現象で、この不具合も確認しています。

その場合は見るポイントは2つ。

(1)functions.phpに以下を追加

//wp_headのtitleタグを削除
remove_action(‘wp_head’, ‘_wp_render_title_tag’, 1);

これをすることでwp_head関数からtitleタグを削除することができるようになります。

これでダメなら(2)を試す。

(2)functions.phpに以下の記述がないか確認。あれば削除。

add_theme_support( 'title-tag' );

カテゴリーページのタイトルタグの設定

ようやく本編です。

カテゴリーページのタイトルタグを「Wordpress」から「Wordpressカスタマイズ方法Tips」のようにするにはソースコードに直書きしました。

編集ファイル
functions.php

以下の記述を追記。

function change_document_title_parts( $title_parts ){
  if ( is_category( 3 ) ) {
	$title_parts['title']	= 'テックアカデミーを3ヶ月受講した結果‥本音の口コミ評判で徹底解説!';
	$title_parts['site'] = trim( get_bloginfo('name'));
	$title_parts['tagline'] = '';
  } elseif ( is_category(7) ) {
	$title_parts['title']	= 'RubyとRailsプログラミングのTipsや備忘録';
	$title_parts['site'] = trim( get_bloginfo('name'));
	$title_parts['tagline'] = '';
  } elseif ( is_category(8) ) {
	$title_parts['title']	= 'Wordpressカスタマイズ方法Tips';
	$title_parts['site'] = trim( get_bloginfo('name'));
	$title_parts['tagline'] = '';
  } elseif ( is_category(9) ) {
	$title_parts['title']	= 'テックキャンプを3ヶ月受講!料金や教材、講師について徹底解説';
	$title_parts['site'] = trim( get_bloginfo('name'));
	$title_parts['tagline'] = '';
  }
  return $title_parts;
}
add_filter( 'document_title_parts', 'change_document_title_parts' );

is_category()で、カテゴリーページのIDを指定しています。カテゴリーIDは以下のようにカテゴリー設定ページのWordpressにマウスカーソルを合わせればブラウザの下部に表示されるので、その数字です。

フィルターフックのdocument_title_partsに自作の関数を指定しています。引数の$title_partsは連想配列になっていて

$title_parts[‘title’]
$title_parts[‘site’]
$title_parts[‘tagline’]

を1つ1つ設定しています。taglineは何のことかわかりませんが、SEOを考えると必要なのはtitleとsiteでよいのかなと思いました。

タイトルタグのセパレータを「-」から「|」にしたければ

SEOを意識したとしてもどちらでも構わないのですが私はパイプよりハイフンの方がいいんじゃないかと思います。

けど日本ではまだパイプが主流のようです。Wordpressはハイフンで出力するので、それをあえてパイプに変えたい場合は以下のようにします。

編集ファイル
functions.php

に以下の記述を追加。

function change_title_separator( $sep ){
    $sep = '|';
    return $sep;
}
add_filter( 'document_title_separator', 'change_title_separator' );

add_filter関数を使ってフィルターフックに関数を登録しています。

具体的にはdocument_title_separatorというフィルターフックに、change_title_separator関数を登録しています。

私はまだあまりPHPやWordpressを熟知していないのであらゆるサイトの情報を参考にさせていただきました。

それによるとadd_filterというのはどうやら読み込まれる関数を指定して、それが読まれるとき(あるいはその前かあとか?)に同時に自作の関数も通過するようになるので、いわば自作関数で処理を上書きできるようなイメージですね。それを使ってchange_title_separator関数を自分で定義してあげて、この中でセパレータをパイプに変更しています。

参考にさせていただいたサイト様

WordPressのカテゴリー、タグページに説明文を表示する方法
テンプレートタグ/wp list categories
カテゴリーウィジェットのリンクからtitle属性を削除する方法
WordPressでtitleタグが2つダブって表示されてしまう場合の対処法
WordPressでタイトルを変更するカスタマイズ方法(タイトル、タグライン、サイト名の設定)

タイトルとURLをコピーしました