All in One SEO Pack が生成するタイトルで例外をつくりたい。

有名なWorpdressプラグイン「All in One SEO Pack」。多分に漏れず私も使っております。

今回「ある一部のページだけ例外的に異なるタイトルを生成したい」と思いました。
All in One SEO Pack が生成するタイトルでは、不都合なページがあるというわけです。

タイトル生成に関わるwp_titleフックを使って変更しようとしてみたのですが、All in One SEO Pack が生成するタイトルの優先度が高いので、変更できません。

そこで少し調べると、All in One SEO Pack にフックが用意されているのがわかりました。

All in One SEO Packとapply_filtersとadd_filterと | funxion

aioseop_titleフックが使えます。

add_filter( 'aioseop_title', 'my_change_title');

function my_change_title( $title) {
	
	if( 条件 ) {
		$title = 変更したい内容;
	}

	return $title;
}

できた。
よかった。

と思って、よくみると、無事に変更されたのはtitleタグだけでした。
OGPタグのog:titleは変わっておらんぞ。制御している場所が違うのかー。

<!-- ↓こっちは変わってるけど -->
<title>変更に成功したタイトル</title>

<!-- ↓こっちは何も変わってねーっ -->
<meta property="og:title" content="All in One SEO Packが生成した変更前のタイトル" />

こっちは探すのちょっと苦労しましたが、ソースの中にこんな行を見つけました。

$filtered_value = apply_filters( $this->prefix . 'meta', $filtered_value, $t, $k );

foreachの中でフック名が変数で指定されているので、最初全然わからなかったよ。
前後のソースを読み解いていくと、aiosp_opengraph_meta というフック名になるようです。そこに引数が3つ。

og:titleを変更できるのは、後ろの2つ引数($t$k)の値が次のときです。

$t = 'facebook';
$k = 'title';

ということで、add_filterで次のようにしました。

add_filter( 'aiosp_opengraph_meta', 'my_opengraph_meta_title', 10, 3 );

function my_opengraph_meta_title( $value, $sns, $field ) {

	if( $sns == 'facebook' && $field == 'title' ) {
		$value = 変更したい内容;
	}
	
	return $value;
}

引数が3つということで、add_filterの最後のパラメータに「3」を入れるのをお忘れなく!!(私はこの指定の存在をうっかり忘れており、しばらくハマりました…)

PHP, Wordpress, 備忘録 | , , , , |