有名な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」を入れるのをお忘れなく!!(私はこの指定の存在をうっかり忘れており、しばらくハマりました…)

