Como eu crio uma página de login específica para um usuário específico?

4

Gostaria de saber como criar duas páginas de login separadas para dois usuários específicos?

Diga, por exemplo: tenho dois usuários no meu site. Admin e visualizador.

No frontend do meu site, quero criar duas páginas de login diferentes. Um formulário de login para apenas Admin e um formulário de login apenas para o Viewer. Eu quero que eles estejam em um URL diferente também.

Espero que você possa me ajudar com esse problema. Obrigado!

    
por Sayroose 14.10.2016 / 09:32

4 respostas

2

Resposta on-topic:

Você pode colocar <?php wp_login_form(); ?> em qualquer um dos seus modelos de tema para renderizar um formulário de login no front-end de seu site.

Ou crie seu próprio shortcode [loginform] colocando isso no functions.php :

do seu tema
function wpse_242473_login_form() {
    return wp_login_form( 'echo' => false );
}

add_shortcode( 'loginform', 'wpse_242473_login_form' );
    
por Andy Macaulay-Brook 14.10.2016 / 11:29
0

Existe a função wp_login_form( [ /* array of arguments */ ] ) , que exibe um formulário de login que você pode colocar em cada modelo . Quando você olha para os internos, você verá que a ação do formulário aponta para:

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

… (pelo menos se você não usou o argumento $args['redirect'] ). Isso significa que wp-login.php manipula o sinal. Agora você tem várias opções:

  1. Você pode usar os argumentos para a função ou definir globalmente o filtro login_form_defaults , que permite alterar os valores padrão, como redirect , que por padrão aponta para o site atual:

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

    Em seguida, você pode usar um filtro para redirecionar com base na função (ou executar um logout se a função de usuário conectada não corresponder à função que você deseja permitir o login nesse modelo):

     apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
    
  2. Você coça essa ideia, pois não pode determinar a diferença entre um administrador e um convidado porque você não sabe o papel de um usuário antes eles se conectaram.

por kaiser 18.10.2016 / 21:30
0

Para um formulário de usuário de registro personalizado, você pode usar Campos personalizados avançados para criar um front-end formulário final .

Você pode configurar os campos personalizados para o registro usando o ACF e definir as regras de local para o grupo de campos quando o formulário de usuário for igual a Registrar e Adicionar / Editar.

Eu fiz algo parecido, conectando-me ao filtro acf/pre_save_post e fazendo o seguinte:

  • desinfete as entradas
  • registre o usuário com register_new_user() , que lida com a geração de senha e a notificação por e-mail
  • use wp_update_user() e update_user_meta() para mapear os campos ACF personalizados apropriados para campos de perfil de usuário WP personalizados
  • definir a nova função do usuário
  • use wp_mail() para enviar um e-mail ao administrador, se necessário

Mais algumas informações sobre registro de um usuário com o ACF aqui

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' );
    
por davemac 19.10.2016 / 03:07
-1

Se você está tentando obter um formulário de login separado em uma página diferente daquela para administradores, você pode facilmente usar um plug-in. Existem vários, grátis ou premium.

Eu listarei " Formulário de Registro de Login do Frontend Personalizado " já que já trabalhei com ele no passado. Você pode acessá-lo no Repositório do WordPress.

Ele gerará um shortcode que você pode usar em uma página personalizada para seus usuários do Visualizador somente . O plug-in também vem com código de registro, portanto, facilitará a vida do visitante.

Espero que esta resposta seja a sua pergunta.

    
por Cristian Stan 14.10.2016 / 10:36