web-dev-qa-db-ja.com

ログインページの[登録]リンクを変更する方法

これはおそらく非常に簡単ですが、テーマを変更するために私のテーマのfunctions.phpファイルにフックを追加したいと思います。 Register ログインページ(wp-login.php)にリンクします。

どうすればいいの?

1
Steve Doran

白ウサギをフォローしましょう。

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-login.php#L414

...変更することはできません、それはハードコーディングされています。しかしクリックするとここまで来ます:

http://core.trac.wordpress.org/browser/tags/3.3.1/wp-login.php#L481

...これはマルチサイト用のwp_signup_locationフィルタを持っています、あなたのサイトの!is_multisite()が起動しない場合には。あなたがマルチサイトなら - ここでやめてください。

add_filter( 'wp_signup_location', 'wpse_46848_Hijack_the_back' );
function wpse_46848_Hijack_the_back( $location ) {
    return 'my-registration-page-is-better.php';
}

マルチサイトではない、え?

AFTER登録はregistration_redirectが行われますが、登録ページを表示する前に呼び出されます。元のページから何かを表示する前に、汚い遊びをしてそれにフックしてexit()を使って wp_redirect に分岐することができます。

add_action( 'registration_redirect', 'wpse_46848_Hijack_the_back' );
function wpse_46848_Hijack_the_back( $redirect_to ) {
    wp_redirect( 'my-registration-page-is-better.php' );
    exit();
}

add_actionadd_filterの両方が同じように動作することに注意してください(add_actionadd_filterを呼び出します)。混乱を招くので一般的には推奨できませんが、意味的にはフィルタではなくアクションでフィルタをハイジャックします。あなたは何も返さない。 「フィルタはフィルタ、アクションはアクションです」という厳密な規則に従うことを好む場合は、次のようにします。

add_filter( 'registration_redirect', 'wpse_46848_Hijack_the_back' );
function wpse_46848_Hijack_the_back( $redirect_to ) {
    wp_redirect( 'my-registration-page-is-better.php' );
    return exit();
}
4
soulseekah