2人の特定のユーザー用に2つの別々のログインページを作成する方法を教えてください。
たとえば、自分のサイトに2人のユーザーがいるとします。管理者とビューア。
私のサイトのフロントエンドでは、2つの異なるログインページを作成したいです。管理者専用の1つのログインフォームとビューア専用の1つのログインフォーム。私も彼らが別のURLにいることを望みます。
私はあなたがこの問題を手伝ってくれることを願っています。ありがとうございます。
トピックに関する回答:
あなたは自分のサイトのフロントエンドにログインフォームをレンダリングするためにあなたのテーマテンプレートのいずれかに<?php wp_login_form(); ?>
を入れることができます。
あるいは、これをあなたのテーマの[loginform]
に入れて、あなた自身のショートコードfunctions.php
を作ってください。
function wpse_242473_login_form() {
return wp_login_form( 'echo' => false );
}
add_shortcode( 'loginform', 'wpse_242473_login_form' );
wp_login_form( [ /* array of arguments */ ] )
という関数があり、これはあなたがすべてのテンプレートに入れることができるログインフォームを表示します。内部を見ると、フォームのアクションが次のことを指していることがわかります。
esc_url( site_url( 'wp-login.php', 'login_post' ) )
…(少なくとも$args['redirect']
引数を使用しなかった場合)これはwp-login.php
がサインオンを処理することを意味します。これで複数の選択肢があります。
関数の引数を使用することも、グローバルにフィルタlogin_form_defaults
を設定することもできます。これにより、デフォルトごとに現在のサイトを指すredirect
などのデフォルト値を変更できます。
( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI'],
次に、フィルタを使用してロールに基づいてリダイレクトすることができます(または、ログインしたユーザロールがこのテンプレートからのログインを許可するロールと一致しなかった場合は、ログアウトします)。
apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
ログインしたユーザーbeforeの役割がわからないため、adminとguestの違いを判断できないため、このアイデアをスクラッチします。
カスタム登録ユーザーフォームの場合、 Advanced Custom Fieldsを使用してフロントエンドフォームを作成できます 。
ACFを使用して登録用のカスタムフィールドを設定し、[ユーザーフォーム]が[登録]、[追加/編集]の場合はフィールドグループの配置ルールを設定できます。
私はacf/pre_save_post
フィルタにフックして次のようにして同様のことをしました:
register_new_user()
を使用してユーザーを登録します。wp_update_user()
とupdate_user_meta()
を使用します。wp_mail()
を使用して管理者に電子メールを送りますACFにユーザーを登録する/ /に関するさらに詳しい情報 ここ。
function my_pre_save_user( $post_id ) {
// If we have an email address, add the user
// This field only exists in the new user field group
if ( isset($_POST['acf']['add acf_field_ID here']) && !empty($_POST['acf']['add acf_field_ID here'])) {
// sanitize our inputs
$sanitized_email = sanitize_email( $_POST['acf']['add acf_field_ID here'] );
$sanitized_firstname = sanitize_text_field( $_POST['acf']['add acf_field_ID here'] );
$sanitized_lastname = sanitize_text_field( $_POST['acf']['add acf_field_ID here'] );
$sanitized_contactnumber = sanitize_text_field( $_POST['acf']['add acf_field_ID here'] );
// Prepare basic user info
$username = $sanitized_email;
$email = $sanitized_email;
$display_name = $sanitized_firstname .' '. $sanitized_lastname;
// Register the user and store the ID as $user_id, handles the validation, generates random password and send email notification to user
$user_id = register_new_user( $username, $email );
// If we get an error (eg user already exists)
if( is_wp_error( $user_id ) ) {
// Show the error
echo 'Error: '.$user_id->get_error_message();
// Exit
exit;
// Good to go
} else {
// get single value from post object
$dmc_get_company_field = $_POST['acf']['add acf_field_ID here'];
$dmc_selected_exhibitor = get_field( $dmc_get_company_field );
// Update the new user's info
wp_update_user( array(
'ID' => $user_id,
'first_name' => $sanitized_firstname,
'last_name' => $sanitized_lastname,
'display_name' => $display_name
));
// update the new users's meta
update_user_meta( $user_id, 'dmc_exhibitor_company_name', $dmc_get_company_field );
update_user_meta( $user_id, 'dmc_exhibitor_contact_number', $sanitized_contactnumber );
// update user role
$user_id_role = new WP_User( $user_id );
$user_id_role->set_role( 'contributor' );
$profile_link = get_edit_user_link( $user_id );
$to = "[add email addresses here]";
$headers[] = 'MIME-Version: 1.0';
$headers[] = 'Content-Type: text/html; charset=UTF-8';
$headers[] = 'Reply-To: '. $username. ' <'. $email .'>';
$subject = "[add email subject here]";
$body = "[add email body here]";
// send the email
wp_mail( $to, $subject, $body, $headers );
// redirect to thankyou page
$redirect_url = get_bloginfo('url') . '[add URL to redirect to here]';
wp_redirect( $redirect_url );
// exit this script
exit;
}
} else {
return $post_id;
}
}
add_filter('acf/pre_save_post' , 'my_pre_save_user' );