WordPress4.4よりタイトルを出力するwp_get_document_title()という関数が用意されました。
wp_get_document_title()についてはねんでぶろぐ様の記事が詳しいです。
WordPress 4.4 から wp_title関数が 非推奨になりました
特に手を入れなくてもいい感じにタイトルを出力してくれる便利な関数ですので、title以外にもページの見出しなどでも使おうとしたのですが、titleとそれ以外で条件分岐しようとして悩みました。
ADs
1 2 3 4 5 6 |
<head> <?php wp_head(); ?> </head> <body> <h1><?php echo wp_get_document_title(); ?></h1> </body> |
と記述すると、トップページの結果は以下のようになります。
1 2 3 4 5 6 |
<head> <title>ブログ名称 - ブログ説明文</title> </head> <body> <h1>ブログ名称 - ブログ説明文</h1> </body> |
ここで、titleには「ブログ説明文」はほしいけどh1にはいらないんだよな…と思ってdocument_title_partsにフィルターフックを適用したとしても、どちらも同じdocument_title_partsを使っているためtitle,h1いずれも変更されてしまいます。
1 2 3 4 5 |
function edit_document_title($title){ $title['tagline'] = ''; return $title; } add_filter('document_title_parts','edit_document_title'); |
こんなフィルターフックを書くと
1 2 3 4 5 6 |
<head> <title>ブログ名称</title> </head> <body> <h1>ブログ名称</h1> </body> |
結果はこうなります。そりゃそうだ。
この場合wp_get_document_title()を使いつつh1だけ出力結果を修正する場合、どうしたらいいのか。
doing_action()は関数が実行中かどうかを判定する関数です。返り値はtrue/falseになりますのでif文の中で使えます。
この関数を使い、wp_head()が実行されているかどうかを判定し、document_title_partsの返り値を調整します。
1 2 3 4 5 6 7 8 9 |
function edit_document_title($title){ if(!doing_action('wp_head')){ //wp_headから呼ばれていない場合 $title['tagline'] = ''; } return $title; } add_filter('document_title_parts','edit_document_title'); |
とすると
1 2 3 4 5 6 |
<head> <title>ブログ名称 - ブログ説明文</title> </head> <body> <h1>ブログ名称</h1> </body> |
となります。
同じ関数ですが異なる返り値を出力することができました!
ADs
コメントはまだありません。