web-dev-qa-db-ja.com

特定のユーザー用に特定のログインページを作成する方法を教えてください。

2人の特定のユーザー用に2つの別々のログインページを作成する方法を教えてください。

たとえば、自分のサイトに2人のユーザーがいるとします。管理者とビューア。

私のサイトのフロントエンドでは、2つの異なるログインページを作成したいです。管理者専用の1つのログインフォームとビューア専用の1つのログインフォーム。私も彼らが別のURLにいることを望みます。

私はあなたがこの問題を手伝ってくれることを願っています。ありがとうございます。

3
Sayroose

トピックに関する回答:

あなたは自分のサイトのフロントエンドにログインフォームをレンダリングするためにあなたのテーマテンプレートのいずれかに<?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' );
1

wp_login_form( [ /* array of arguments */ ] ) という関数があり、これはあなたがすべてのテンプレートに入れることができるログインフォームを表示します。内部を見ると、フォームのアクションが次のことを指していることがわかります。

esc_url( site_url( 'wp-login.php', 'login_post' ) )

…(少なくとも$args['redirect']引数を使用しなかった場合)これはwp-login.phpがサインオンを処理することを意味します。これで複数の選択肢があります。

  1. 関数の引数を使用することも、グローバルにフィルタlogin_form_defaultsを設定することもできます。これにより、デフォルトごとに現在のサイトを指すredirectなどのデフォルト値を変更できます。

    ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_Host'] . $_SERVER['REQUEST_URI'],
    

    次に、フィルタを使用してロールに基づいてリダイレクトすることができます(または、ログインしたユーザロールがこのテンプレートからのログインを許可するロールと一致しなかった場合は、ログアウトします)。

     apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
    
  2. ログインしたユーザーbeforeの役割がわからないため、adminguestの違いを判断できないため、このアイデアをスクラッチします。

0
kaiser

カスタム登録ユーザーフォームの場合、 Advanced Custom Fieldsを使用してフロントエンドフォームを作成できます

ACFを使用して登録用のカスタムフィールドを設定し、[ユーザーフォーム]が[登録]、[追加/編集]の場合はフィールドグループの配置ルールを設定できます。

私はacf/pre_save_postフィルタにフックして次のようにして同様のことをしました:

  • 入力をサニタイズする
  • パスワードの生成と電子メール通知を処理するregister_new_user()を使用してユーザーを登録します。
  • 適切なカスタムACFフィールドをカスタムWPユーザープロファイルフィールドにマップするには、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' );
0
davemac