私はいくつかのフロントエンドページのページタイトルを変更するためにdocument_title_parts
フックを使っています。しかし、これはログイン、登録、パスワード管理のページではうまくいかないようです。
Wp-login.phpページの<title>
を変更するにはどうすればいいですか?
次のように表示されるため、簡単にアクセスできないようです。 src:
<title><?php echo get_bloginfo( 'name', 'display' ) . $separator . $title; ?></title>
区切り文字は次のとおりです。
$separator = is_rtl() ? ' › ' : ' ‹ ';
$title
の部分は次のようになります。
login_header( $title = 'Some title' , ... );
しかし、区切り文字を変更するための追加のフィルタのために #40812 のチケットを提出したのを見たので、すでにこれをチェックアウトしたようです。
頭に浮かぶ回避策は、separatorを変更するために、それを置き換えるためにoutput bufferingハックを使うことです。
@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;
}
あなたのテーマのfunctions.phpでこのコードを使用することができます
function custom_login_title( $login_title ) {
return str_replace(array( ' ‹', ' — WordPress'), array( ' •', ' what ever you want'),$login_title );
}
add_filter( 'login_title', 'custom_login_title' );
これはlogin.php <title>
をログインに変更します。
すべての管理ページで同じことができますが、$admin_title
ではなく$login_title
になります。