web-dev-qa-db-ja.com

Wp-login.phpページのタイトルを変更するにはどうすればいいですか?

私はいくつかのフロントエンドページのページタイトルを変更するためにdocument_title_partsフックを使っています。しかし、これはログイン、登録、パスワード管理のページではうまくいかないようです。

Wp-login.phpページの<title>を変更するにはどうすればいいですか?

4
henrywright

次のように表示されるため、簡単にアクセスできないようです。 src

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

区切り文字は次のとおりです。

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

$titleの部分は次のようになります。

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

しかし、区切り文字を変更するための追加のフィルタのために #40812 のチケットを提出したのを見たので、すでにこれをチェックアウトしたようです。

頭に浮かぶ回避策は、separatorを変更するために、それを置き換えるためにoutput bufferingハックを使うことです。

5
birgire

問題

@birgireが指摘したように、wp-login.phpのタイトルテキストを変更することは、フロントエンドが提供するような様々なタイトル変更フィルタを持っていないので、簡単には不可能です。

解決策

しかし、wp-login.phpにアクセスしているかどうかを検出してから、ユーザーがどのアクションを実行しているかを判断できます。ログイン、登録、またはパスワードのリセットです。

<title>wp-login.phpタグは、3つの部分から構成されています。

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

get_bloginfo( 'name', 'display' )$titleの領域を変更することはできますが、残念ながら$separatorはここで概説した手法では変更できません。

option_{option_name}フィルター(この場合はoption_blogname)を使用して、タイトルのget_bloginfo( 'name', 'display' )部分を変更することができます。

$title__()に渡されます。これは傍受してgettextフィルタを使用して変更できることを意味します。

$titleは、ログインページ、登録ページ、およびパスワード紛失ページで、それぞれ__('Log In')__('Registration Form')、および__('Lost Password')に割り当てられています。

コード

このコードはタイトルの変更可能な部分の両方に対してwp-login.phpの適切なフィルタを配線します。

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

これは、wp-login.phpアクションごとにtitleタグのblogname部分を変更するフィルタです。

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

最後に、これらはそれぞれの$titleアクションのtitleタグの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

あなたのテーマの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' );

これはlogin.php <title>をログインに変更します。

すべての管理ページで同じことができますが、$admin_titleではなく$login_titleになります。

2
chop62