私は関数wp_login_formを使って、テンプレートでフロントエンドログインを提供しています。ログインとログアウト後のリダイレクトをかなりきれいに処理します。しかし、ユーザー名/パスワードが一致しない、または存在しない場合は、ユーザーは管理者ログインページにリダイレクトされ、不安定なjsエラーが発生します。パスワードを再設定しようとしたときも同様です。パスワードを再設定するには自分の電子メールアドレスを入力する必要があるバックエンドページに移動します。私は自分のテンプレートにこれら両方のアクティビティを表示したいです。私はこれを行うことができる方法はありますか?
事前に助けてくれてありがとう。
はい、可能です。これには3つのフィルタを作成する必要があります。
class WPSE29338_Admin {
public static function setup() {
add_filter('login_url', array(__CLASS__, 'modifyLoginURL'), 10, 2);
add_filter('lostpassword_url', array(__CLASS__, 'modifyLostPasswordURL'), 10, 2);
add_filter('register', array(__CLASS__, 'modifyRegisterURL'));
}
public static function modifyLoginURL($loginUrl, $redirect = '') {
$loginUrl = site_url('login'); // Link to login URL
if(!empty($redirect)) {
$loginUrl = add_query_arg('redirect_to', urlencode($redirect), $loginUrl);
}
return $loginUrl;
}
public static function modifyLostPasswordURL($lostpwUrl, $redirect = '') {
$lostpwUrl = wp_login_url() . '#lostpassword'; // Link to lostpassword URL
if(!empty($redirect)) {
$lostpwUrl = add_query_arg('redirect_to', urlencode($redirect), $lostpwUrl);
}
return $lostpwUrl;
}
public static function modifyRegisterURL($registerUrl) {
if(!is_user_logged_in()) {
if (get_option('users_can_register')) {
$registerUrl = '<a href="' . wp_login_url() . '#register" class="btn">' . __('Register') . '</a>'; // Link to register URL
} else {
$registerUrl = '';
}
}
return $registerUrl;
}
}
最初に、フォームaction
属性でwp_login_url()
によって使用される関数wp_login_form()
の出力をフィルタリングする必要があります。
メソッドmodifyLoginUrl()
を見てください。ここでは、ページlogin
のURLを変数$loginUrl
に格納しています。このページはWordPress内に存在しなければならないので、最初に作成してください。
次に、関数wp_lostpassword_url()
とwp_register()
のためのフィルタが必要です。基本的には同じです。サイトのURLは、変数$lostpwUrl
および$registerUrl
内に格納されています。
大事なことを言い忘れましたが、正しいアクションフックでクラスを呼び出す必要があります。テーマの場合はafter_setup_theme
、プラグインの場合はplugins_loaded
を使用できます。
add_action('after_setup_theme', 'wpse29338_admin_init');
function wpse29338_admin_init() {
WPSE29338_Admin::setup();
}
add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
WPSE29338_Admin::setup();
}