web-dev-qa-db-fra.com

wp_title () vide sur une page de garde statique

J'essaie d'utiliser wp_title() pour créer un en-tête pour mes pages, mais j'utilise une page de garde statique et, bien que toutes les autres pages affichent correctement le titre, la page de garde ne le sera pas.

C'est ce que je travaille avec:

<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>

Initialement, je pensais que la page de couverture pouvait être tirée de index.php, aussi j’ai ajouté le même extrait de code, mais sans succès, la même chose est rendue: une balise vide h1.

Que se passe t-il ici? Je veux que le titre de la page apparaisse dans la balise h1.

1
Benjamin Kovach

wp_title () est destiné aux balises de titre HTML de la section head de votre site Web.

Ce n'est pas pour sortir un titre. Utilisez the_title () ou get_the_title () ,

4
Chris_O

Si vous regardez le source de wp_title() , vous verrez qu’aucune sortie n’est prévue pour une page de couverture statique.

Utilisez the_title() pour la sortie visuelle, comme suggéré par @Chris_O. Mais pour le titre dans la section <head>, vous devez filtrer wp_title() et le remplir s'il est vide.

Exemple de code ( à télécharger sur 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