All In One SEO Packを導入したサイトで特定のカテゴリだけタイトルを変更する方法

All In One SEO Packというプラグインで各種metaデータを管理していたサイトで特定のカテゴリに属している記事のタイトルをカスタマイズするのに苦労したので覚書

前提条件

この要求が発生する可能性があるのは以下の条件を満たすサイトの場合 1. All In One SEO Packを導入している 2. 1記事に対して複数のカテゴリを設定する運用をしている

要望の内容

「コラム」と「新着記事」のように複数のカテゴリを設定している投稿記事のタイトルがAll In One SEO Packで設定した「%post_title% | %category_title% | %blog_title%」では、「記事タイトル | 新着記事 | サイト名」のように表示されてしまうので、「記事タイトル | コラム | サイト名」となるようにカスタマイズしてほしい。

原因予測

All In One SEO Packがcategoryの配列(カテゴリを複数設定した場合は配列になるので)から取得するカテゴリ情報が「コラム」ではなく「新着記事」となっているからだと思う。

対策

functions.php内に、特定のカテゴリがcategory配列に含まれている場合は、タイトルを書き換えるフィルタを記述する。

注意が必要な点

wp_titleフックでタイトルを書き換えてもダメだったので、All In One SEO Packが提供しているaioseop_titleフックを利用する。

functions.php に記載したコード


// 特定カテゴリの記事タイトルを書き換え
function change_column_title($title) {

// 特定のカテゴリが設定されているかのチェック
	$cnt = 0;
	$cat = get_the_category();
	foreach($cat as $value) {
		if($value->slug == '<<変更したいカテゴリのスラッグ>>') {
			$cnt = $cnt + 1;
		}
	}

// 該当記事が特定のカテゴリに属していたら$cntが1になっているはずなので、タイトルを変更する
	if($cnt == 1) {
		$t = get_the_title();
		$title = $t ." | コラム | サイト名";
	}
	return $title;
}

// フィルタの実行タイミングはAll In One SEO Packが提供しているaioseop_titleフックを利用
add_filter('aioseop_title','change_column_title');
The following two tabs change content below.

Web勉強中おじさん

最新記事 by Web勉強中おじさん (全て見る)

0