web-dev-qa-db-de.com

Wie ändere ich den Seitentitel von wp-login.php?

Ich habe den Hook document_title_parts verwendet, um den Seitentitel für einige Front-End-Seiten zu ändern. Dies scheint jedoch nicht für die Anmelde-, Registrierungs- und Kennwortverwaltungsseiten zu funktionieren.

Wie kann ich die wp-login.php Seite <title> ändern?

4
henrywright

Es sieht so aus, als wäre es nicht leicht zugänglich, da es als angezeigt wird src:

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

wo das Trennzeichen ist:

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

und der $title Teil kommt von:

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

Aber es sieht so aus, als hätten Sie dies bereits überprüft, da Sie ein Ticket # 40812 für einen zusätzlichen Filter zum Ändern des Trennzeichens eingereicht haben.

Ein Workaround, der in den Sinn kommt, um das Trennzeichen zu ändern, wäre die Verwendung von Ausgabepufferung Hacks, um es zu ersetzen.

5
birgire

Das Problem

Wie @birgire betonte, ist es nicht einfach, den Titeltext in wp-login.php zu ändern, da wir nicht über die verschiedenen Filter zur Titeländerung verfügen, die das Front-End bietet.

Eine Lösung

Wir können jedoch feststellen, ob wp-login.php aktiviert ist, und dann feststellen, welche Aktion der Benutzer ausführt: Anmelden, Registrieren oder Zurücksetzen seines Kennworts.

Das <title>-Tag in wp-login.php besteht aus drei Teilen:

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

Wir können die Bereiche get_bloginfo( 'name', 'display' ) und $title ändern, aber leider kann $separator mit der hier beschriebenen Technik nicht geändert werden.

Mit dem Filter option_{option_name} (in diesem Fall option_blogname) können Sie den Teil get_bloginfo( 'name', 'display' ) des Titels ändern.

Der $title wird an __() übergeben, was bedeutet, dass wir ihn mit dem Filter gettext abfangen und ändern können.

$title ist auf den Anmelde-, Registrierungs- und Passwort-Seiten mit __('Log In'), __('Registration Form') und __('Lost Password') belegt.

Der Code

Mit diesem Code werden die entsprechenden Filter für wp-login.php für beide veränderbaren Teile des Titels verbunden.

/**
 * 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 );
        }
    }
}

Hier sind die Filter, die den Blogname-Teil des Title-Tags für jede der wp-login.php-Aktionen ändern.

/**
 * 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.';
}

Schließlich sind dies die Filter, die den $title-Teil des title-Tags für jede der wp-login.php-Aktionen ändern.

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

Sie können diesen Code in Ihrer themes functions.php verwenden

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' );

Dies ändert den login.php <title> in Anmelden. • Blogname, was immer Sie wollen

Sie können dasselbe für alle Admin-Seiten tun, aber es wäre $admin_title anstelle von $login_title

2
chop62