カスタムテンプレートページの管理パネルで設定されたタイトルを上書きしたり、カスタムの<title>
タグを出力したりするのが困難です。
親テーマはWordPressの標準のTwentysixteenで、これは タイトルタグテーマ機能 を使用します(もうすぐ廃止予定の関数wp_title()とは対照的に) 。 WordPressコードリファレンス によると、正しいフックはwp_title
フィルタです。
Wp_titleフィルタは、ページのタイトルをフィルタするために使用されます(wp_title()で呼び出されます)。これは、記事、ページ、またはカテゴリのタイトルではなく、HTMLタグに表示されるテキスト(「タイトルタグ」または「メタタイトル」とも呼ばれます)をフィルタリングします。
だから私は単にfunctions.phpファイルで条件付きテストを作成し、そこでWordPressによって作成されたtitleタグを上書きすることができるはずです。例えば:
function custom_filter_wp_title( $title, $sep ) {
// removed conditional to prove not working anywhere
// if ( is_page_template( 'sometemplate.php' ) ) {
$title = "My custom template page...";
// }
return $title;
}
add_filter( 'wp_title', 'custom_filter_wp_title', 10, 2 );
コーデックスの例 から派生。
私が言うことができる限り、このカスタムフィルタはどこでも機能していません、バックエンドで設定されたタイトルはHTMLヘッダのtitleタグに現れています。私は優先度を99999に上げました。何がおかしいのですか?
他の誰かがこれに問題を抱えているなら、それはYoastプラグインが原因である可能性があります。つかいます:
add_filter( 'pre_get_document_title', function( $title ){
// Make any changes here
return $title;
}, 999, 1 );
私たちはこれをタイトル(ヘッダーとポストの両方のタイトル)でのショートコードサポートのために見つけました:
//shortcode support in titles
add_filter( 'the_title', 'do_shortcode' ); //should be post title
add_filter( 'wp_title', 'do_shortcode' ); //should be HTML/Browser title
add_filter( 'document_title_parts', 'wp44_header_title_function' ); //own function for HTML/Browser title
function wp44_header_title_function($title) {
if (isset($title['title'])) $title['title'] = do_shortcode($title['title']);
if (isset($title['page'])) $title['page'] = do_shortcode($title['page']);
if (isset($title['tagline'])) $title['tagline'] = do_shortcode($title['tagline']);
if (isset($title['site'])) $title['site'] = do_shortcode($title['site']);
return $title;
}
/wp-includes/general-template.phpでは、4.4で「ドキュメントのタイトルを生成前にフィルタ処理する」に追加されたと書かれているので、wp44と呼びました。
私は標準的なwp_titleフィルタが機能するはずだと思いますが、私たちはそれ自身のことをし、そのテーマのために少なくともdocument_title_partsのように見えるクレイジーなテーマを使っていることを知っています。