web-dev-qa-db-ja.com

静的フロントページでwp_title()が空

私はwp_title()を使用して自分のページの見出しを作成しようとしていますが、静的フロントページを使用しています。他のすべてのページではタイトルが正しくレンダリングされますが、フロントページは正しく表示されません。

これは私が働いているものです:

<div id="main-content">
    <h1><?php wp_title("", true); ?></h1>
    <?php while( have_posts() ) : the_post() ?>
        <div class="pagecontent">
            <?php the_content(); ?>
        </div>
    <?php endwhile ?>   
</div>

最初はフロントページがindex.phpから描画される可能性があると思ったので、そこに同じコードスニペットを追加しました - しかし、そのような運がない、同じことがレンダリングされます - 空のh1タグ。

何が起きてる?ページのタイトルをh1タグに表示します。

1
Benjamin Kovach

wp_title() は、WebサイトのヘッドセクションにあるHTMLのタイトルタグ用です。

タイトルを出力するためのものではありません。 the_title() 、または get_the_title() を使用します。

4
Chris_O

wp_title() のソースを見ると、静的フロントページ用に計画された出力がないことがわかります。

@Chris_Oが示すように、ビジュアル出力にはthe_title()を使用してください。しかし、<head>セクションのタイトルの場合、wp_title()をフィルタリングし、空の場合はそれを入力する必要があります。

サンプルコード( GitHubからのダウンロード ):

// Hook in very late, let the theme fix it first.
add_filter( 'wp_title', 't5_fill_static_front_page_title', 100 );

/**
 * Fill empty front page title if a static page is set.
 *
 * @wp-hook wp_title
 * @param   string $title Existing title
 * @return  string
 */
function t5_fill_static_front_page_title( $title )
{
    // another filter may have fixed this already.
    if ( '' !== $title or ! is_page() or ! is_front_page() )
    {
        return $title;
    }

    $page_id = get_option( 'page_on_front' );
    $page    = get_page( $page_id );

    if ( ! $page or '' === $page->post_title )
    {
        $title = get_option( 'blogname' );
    }
    else
    {
        $title = $page->post_title;
    }

    // We don’t know if there is any output after the title, so we cannot just
    // add the separator. We use an empty space instead.
    return "$title ";
}
3
fuxia