web-dev-qa-db-fra.com

Comment changer le titre de la page wp-login.php?

J'utilise le crochet document_title_parts pour changer le titre de la page avant. Toutefois, cela ne semble pas fonctionner pour les pages de connexion, d’enregistrement et de gestion des mots de passe.

Comment changer la page <title> de wp-login.php?

4
henrywright

Il semble que ce ne soit pas facilement accessible car il est affiché comme src:

<title><?php echo get_bloginfo( 'name', 'display' ) . $separator . $title; ?></title>

où le séparateur est:

    $separator = is_rtl() ? ' &rsaquo; ' : ' &lsaquo; ';

et la partie $title provient de:

login_header( $title = 'Some title' , ... );

Mais il semble que vous ayez déjà vérifié cela, car je vois que vous avez classé un ticket # 40812 pour un filtre supplémentaire permettant de changer le séparateur .

Une solution de contournement qui me vient à l’esprit, pour changer le séparateur , serait d’utiliser output buffering hacks pour le remplacer.

5
birgire

Le problème

Comme @birgire l'a fait remarquer, il est difficile de modifier le texte du titre dans wp-login.php, car nous n'avons pas les divers filtres de modification du titre comme les offres frontales.

Une solution

Cependant, nous pouvons détecter si nous sommes sur wp-login.php et déterminer ensuite l'action que l'utilisateur prend: se connecter, s'inscrire ou réinitialiser son mot de passe.

La balise <title> sur wp-login.php est composée de trois parties:

<title><?php echo get_bloginfo( 'name', 'display' ) . $separator . $title; ?></title>

Nous pouvons modifier les zones get_bloginfo( 'name', 'display' ) et $title, mais malheureusement, $separator ne peut pas être modifié avec la technique décrite ici.

Le filtre option_{option_name} (option_blogname dans ce cas) peut être utilisé pour modifier la partie get_bloginfo( 'name', 'display' ) du titre.

Le $title est passé à __(), ce qui signifie que nous pouvons l’intercepter et le modifier à l’aide du filtre gettext.

$title se voit attribuer __('Log In'), __('Registration Form') et __('Lost Password') sur les pages de connexion, d’enregistrement et de mot de passe perdu.

Le code

Ce code connectera les filtres appropriés sur wp-login.php pour les deux parties modifiables du titre.

/**
 * Detect if we're on wp-login.php and wire up the appropriate filters
 * based on what action being taken by the user.
 * idea via https://wordpress.stackexchange.com/a/12865/2807
 */
add_action( 'init', 'wpse_login_register_password_title' );
function wpse_login_register_password_title() {

    if ( isset( $GLOBALS['pagenow'] ) && $GLOBALS['pagenow'] === 'wp-login.php' ) {

        // Registration
        if ( ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'register' ) {
            add_filter( 'option_blogname', 'wpse_login_page_register_blogname', 10, 1 );
            add_filter( 'gettext', 'wpse_login_page_register_title', 10, 3 );
        }

        // Password
        else if ( ! empty( $_REQUEST['action'] ) && $_REQUEST['action'] === 'lostpassword' ) {
            add_filter( 'option_blogname', 'wpse_login_page_password_blogname', 10, 1 );
            add_filter( 'gettext', 'wpse_login_page_password_title', 10, 3 );
        }

        // Log in
        else {
            add_filter( 'option_blogname', 'wpse_login_page_blogname', 10, 1 );
            add_filter( 'gettext', 'wpse_login_page_title', 10, 3 );
        }
    }
}

Voici les filtres qui modifieront la partie blogname de la balise title pour chacune des actions wp-login.php.

/**
 * Change get_bloginfo( 'name', 'display' ) portion of the <title>'s
 * text on the wp-login.php page.
 * Immediately remove the filters so that they only run once.
 */
function wpse_login_page_blogname( $value ) {
    // Log in
    remove_filter( 'option_blogname', 'wpse_login_page_blogname', 10, 1 );
    return 'This is the changed blog name for the login page.';
}

function wpse_login_page_register_blogname( $value ) {
    // Register
    remove_filter( 'option_blogname', 'wpse_login_page_register_blogname', 10, 1 );
    return 'This is the changed blog name for the register page.';
}

function wpse_login_page_password_blogname( $value ) {
    // Reset password
    remove_filter( 'option_blogname', 'wpse_login_page_password_blogname', 10, 1 );
    return 'This is the changed blog name for the password reset page.';
}

Enfin, ce sont les filtres qui modifieront la partie $title de la balise title pour chacune des actions wp-login.php.

/**
 * Translate the $title portion of the <title>'s text on the wp-login.php page.
 * Immediately remove the filters so that they only run once.
 *
 * @param string $translation  Translated text.
 * @param string $text         Text to translate.
 * @param string $domain       Text domain. Unique identifier for retrieving translated strings.
 *
 * @return string
 */
function wpse_login_page_title( $translation, $text, $domain ) {
    // Log in
    // The 'default' text domain is reserved for the WP core.
    if ( 'default' === $domain && 'Log In' === $text ) {
        $translation = 'This is the changed "Log In" text.';
        remove_filter( 'gettext', 'wpse_login_page_title', 10, 3 );
    }
    return $translation;
}

function wpse_login_page_register_title( $translation, $text, $domain ) {
    // Register
    if ( 'default' === $domain && 'Registration Form' === $text ) {
        $translation = 'This is the changed "Registration Form" text.';
        remove_filter( 'gettext', 'wpse_login_page_register_title', 10, 3 );
    }
    return $translation;
}

function wpse_login_page_password_title( $translation, $text, $domain ) {
    // Reset password
    if ( 'default' === $domain && 'Lost Password' === $text ) {
        $translation = 'This is the changed "Lost Password" text.';
        remove_filter( 'gettext', 'wpse_login_page_password_title', 10, 3 );
    }
    return $translation;
}
3
Dave Romsey

Vous pouvez utiliser ce code dans vos thèmes functions.php

function custom_login_title( $login_title ) {
return str_replace(array( ' &lsaquo;', ' &#8212; WordPress'), array( ' &bull;', ' what ever you want'),$login_title );
}
add_filter( 'login_title', 'custom_login_title' );

Ceci changera le login.php <title> en Connexion • Nommez ce que vous voulez

Vous pouvez faire la même chose pour toutes les pages d'administration, mais ce serait $admin_title au lieu de $login_title

2
chop62