web-dev-qa-db-ja.com

Wp_titleフィルターが26の子テーマで機能しない

カスタムテンプレートページの管理パネルで設定されたタイトルを上書きしたり、カスタムの<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に上げました。何がおかしいのですか?

1
Bob Diego

他の誰かがこれに問題を抱えているなら、それはYoastプラグインが原因である可能性があります。つかいます:

add_filter( 'pre_get_document_title', function( $title ){
    // Make any changes here
    return $title;
}, 999, 1 );
1
Erin

私たちはこれをタイトル(ヘッダーとポストの両方のタイトル)でのショートコードサポートのために見つけました:

//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のように見えるクレイジーなテーマを使っていることを知っています。

1
Andrew T