web-dev-qa-db-fra.com

Supprimer la description de <titre> dans Accueil

Mon thème prend en charge la balise title add_theme_support('title-tag'), mais je ne peux pas supprimer la description wordpress bloginfo('description') de <title> sur la page d'accueil.

J'essaie d'utiliser ce filtre sans succès:

add_filter( 'wp_title', function ( $title, $sep ) {
    global $paged, $page;

    $title .= get_bloginfo( 'name' );

    if ( is_home() || is_front_page() )
        $title = "$title";

    return $title;
}, 10, 2 );
5
marcelo2605

Trouvé une solution:

add_filter( 'pre_get_document_title', function ( $title ) {
    if(is_front_page()){
        $title = get_bloginfo();
    }
    return $title;
});
1
marcelo2605

wp_get_document_title() a des filtres intéressants - pre_get_document_title et document_title_parts .

/**
 * Filter the parts of the document title.
 *
 * @since 4.4.0
 *
 * @param array $title {
 *     The document title parts.
 *
 *     @type string $title   Title of the viewed page.
 *     @type string $page    Optional. Page number if paginated.
 *     @type string $tagline Optional. Site description when on home page.
 *     @type string $site    Optional. Site title when not on home page.
 * }
 */
add_filter( 'document_title_parts', function ( $title ) {

    if ( is_home() || is_front_page() )
        unset($title['tagline']);

    return $title;

}, 10, 1 );

En regardant en arrière; le filtre pre_get_document_title est assez intéressant. Essentiellement, avant de traiter le titre, ce filtre sera exécuté. Si le résultat n'est pas vide (ce qui n'était pas prévu), le processus est court-circuité.

$title = apply_filters( 'pre_get_document_title', '' );
if ( ! empty( $title ) ) {
    return $title;
}

Cela signifie que si vous définissez le titre, vous ne devez vous soucier de rien d'autre. La bonne chose est que vous pouvez faire des exceptions à la règle. Donc, pour répondre à votre question initiale:

add_filter( 'pre_get_document_title', function( $title ) {

    if ( is_home() || is_front_page() ) {

        // Return blog title on front page

        $title = get_bloginfo( 'name' );
    }

    return $title;

} );
8
jgraup

Le problème est la ligne:

$title = "$title";

En fait, vous remplacez simplement le $title par lui-même. Si vous le changez en

$title = get_bloginfo( 'name' );

le titre renvoyé sur la page d'accueil sera le nom de votre blog. Vous pouvez y mettre n'importe quelle ficelle. En outre, il n'est pas nécessaire d'appeler les globals ici.

Voici du code qui devrait fonctionner:

add_filter( 'wp_title', function ( $title, $sep ) {

    $title .= get_bloginfo( 'name' );

    if ( is_home() || is_front_page() )
        $title = "Any string you want to have";

    return $title;

}, 10, 2 );
1
fischi