WordPressでカテゴリ別にdescriptionを出し分ける方法【All in One SEO対応・サンプルコード付き】
SEO対策の基本でもある「meta description」。
WordPressではAll in One SEO(AIOSEO)プラグインを使えばdescriptionの管理ができますが、
「投稿ごとにカテゴリに応じて内容を変えたい」と思ったことはありませんか?
この記事では、特定のカテゴリに属する投稿だけdescriptionをカスタムフィールドから生成し、
それ以外は本文から自動抜粋する方法を、サンプルコード付きで解説します。
想定シナリオ
- WordPress + AIOSEO を使用中
- 投稿ページで表示する description を柔軟に制御したい
- カテゴリごとに下記のような分岐を実現したい:
カテゴリ | 使用するフィールド | 内容 |
---|---|---|
news | custom_excerpt | 投稿の要約 |
company | company_name , company_location , company_message | 3つの項目を結合して紹介文に |
event | event_summary | イベント概要を抜粋 |
その他 | 本文 | 本文冒頭から120文字を自動生成 |
事前準備:必要なカスタムフィールドを用意
Advanced Custom Fields(ACF)などを使って、
各投稿に必要なカスタムフィールドを追加しておきましょう。
例
custom_excerpt
(newsカテゴリ用)company_name
,company_location
,company_message
(companyカテゴリ用)event_summary
(eventカテゴリ用)
実装コード(functions.php)
以下のコードを functions.php
に追加するだけで、投稿のカテゴリごとにdescriptionが動的に切り替わります。
function my_change_description( $description ) {
global $area_description;
if ( is_category() ) {
// カテゴリーページの処理
$cat = get_queried_object();
$cat_id = $cat->term_id;
$cat_name = $cat->cat_name;
$cat_custom_description = get_term_meta( $cat_id, 'cat_description_self', true );
if ( $cat_custom_description ) {
$description = $cat_custom_description;
} else {
$description = $cat_name . '一覧。' . $area_description;
}
} elseif ( is_single() ) {
$post_id = get_the_ID();
$custom_description = get_post_meta( $post_id, '_aioseo_description', true );
if ( $custom_description ) {
$description = $custom_description;
} else {
$categories = get_the_category( $post_id );
$slugs = wp_list_pluck( $categories, 'slug' );
if ( in_array( 'news', $slugs, true ) ) {
// newsカテゴリ用カスタム抜粋
$description = get_post_meta( $post_id, 'custom_excerpt', true );
} elseif ( in_array( 'company', $slugs, true ) ) {
// companyカテゴリ用複数フィールド結合
$name = get_post_meta( $post_id, 'company_name', true );
$location = get_post_meta( $post_id, 'company_location', true );
$message = get_post_meta( $post_id, 'company_message', true );
$description = "{$name}({$location})|{$message}";
} elseif ( in_array( 'event', $slugs, true ) ) {
// eventカテゴリ用
$description = get_post_meta( $post_id, 'event_summary', true );
} else {
// それ以外は本文から抜粋
$content = get_post_field( 'post_content', $post_id );
$content = strip_tags( $content );
$content = preg_replace( '/\s+/', ' ', $content );
$description = $content;
}
// 共通:120文字制限
$description = strip_tags( $description );
if ( mb_strlen( $description, 'UTF-8' ) > 120 ) {
$description = mb_substr( $description, 0, 120, 'UTF-8' ) . '…';
}
}
}
return $description;
}
add_filter( 'aioseo_description', 'my_change_description' );
出力例
投稿カテゴリ:company
の場合
カスタムフィールド入力
company_name
: 株式会社フタバcompany_location
: 横浜市南区company_message
: 地域密着の葬儀サービスを提供しています。
➡ 出力される description:
株式会社フタバ(横浜市南区)|地域密着の葬儀サービスを提供しています。
注意点と補足
- カスタムフィールドが空だった場合は
description
が空にならないよう、必要に応じてフォールバック処理を追加してください。 - カテゴリ判定は slug(スラッグ)で行っています。スラッグは WordPress のカテゴリ編集画面で確認できます。
get_post_meta()
は ACF フィールドにも対応しています。ACFを使っている場合はget_field()
に書き換えてもOKです。
まとめ
カテゴリ別に description を出し分けることで、よりSEOに最適化されたページを作成できます。
特に情報の種類が明確に分かれているサイトでは、検索結果でのクリック率向上も期待できます。
AIOSEOのdescriptionフィルターを活用して、投稿内容に最適な説明文を動的に制御していきましょう!
【CF7対応】textarea の改行を br に反映する方法:確認画面で見やすく表示する実装術
7月 2, 2025固定ページのスラッグで分ける!WordPress条件分岐の基本と実践テクニック
7月 1, 2025【WordPress開発メモ】the_post_thumbnail() と get_the_post_thumbnail_url() の違いと正しい使い方(Lightbox対応)
6月 17, 2025