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