¿Cómo creo una página de inicio de sesión específica para un usuario específico?

4

Me pregunto, ¿cómo puedo crear dos páginas de inicio de sesión separadas para dos usuarios específicos?

Diga, por ejemplo: tengo dos usuarios en mi sitio. Administrador y visor.

En la interfaz de mi sitio, quiero crear dos páginas de inicio de sesión diferentes. Un formulario de inicio de sesión solo para el Administrador y un formulario de inicio de sesión solo para el Visor. Quiero que estén en una url diferente también.

Espero que me puedas ayudar con este problema. Gracias!

    
pregunta Sayroose 14.10.2016 - 09:32

4 respuestas

2

Respuesta sobre el tema:

Puedes poner <?php wp_login_form(); ?> en cualquiera de tus plantillas de tema para mostrar un formulario de inicio de sesión en la parte delantera de tu sitio.

O crea tu propio shortcode [loginform] colocando esto en el tema functions.php :

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

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

Existe la función wp_login_form( [ /* array of arguments */ ] ) , que muestra un formulario de inicio de sesión que puede colocar en cada plantilla . Cuando mire las partes internas, verá que los formularios de acción apuntan a:

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

... (al menos si no usaste el argumento $args['redirect'] ). Esto significa que wp-login.php maneja el inicio de sesión. Ahora tienes múltiples opciones:

  1. Puede usar los argumentos para la función o configurar globalmente el filtro login_form_defaults , que le permite modificar los valores predeterminados, como redirect , que por defecto apuntan al sitio actual:

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

    Luego, puede usar un filtro para redirigir según la función (o realizar un cierre de sesión si la función de usuario que inició sesión no coincide con la función que desea permitir el inicio de sesión desde esta plantilla):

     apply_filters( 'login_redirect', $redirect_to, $requested_redirect_to, $user );
    
  2. Rascas esa idea porque no puedes determinar la diferencia entre un admin y un guest , ya que no conoces el rol de un usuario antes se conectaron.

respondido por el kaiser 18.10.2016 - 21:30
0

Para un formulario de usuario de registro personalizado, puede usar Campos personalizados avanzados para crear una fachada forma final .

Puede configurar los campos personalizados para el registro utilizando ACF, y establecer las reglas de ubicación para el grupo de campos cuando el Formulario de usuario es igual a Registrar, y Agregar / Editar.

Hice algo similar, conectándome al filtro acf/pre_save_post y haciendo lo siguiente:

  • desinfectar las entradas
  • registre al usuario con register_new_user() , que maneja la generación de contraseña y la notificación por correo electrónico
  • use wp_update_user() y update_user_meta() para asignar los campos ACF personalizados apropiados a los campos de perfil de usuario WP personalizados
  • establecer el nuevo rol del usuario
  • use wp_mail() para enviar un correo electrónico a admin si es necesario

Más información sobre registrar un usuario en ACF aquí.

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

Si está intentando obtener un formulario de inicio de sesión separado en una página diferente a la de los administradores, puede utilizar un complemento fácilmente. Hay varios, gratis o premium.

Enumeraré " Formulario de registro de inicio de sesión de frontend personalizado ", como ya he trabajado con él en el pasado. Puedes alcanzarlo en el repositorio de WordPress.

Generará un código abreviado que puede usar en una página personalizada para sus usuarios de Viewer only . El complemento también viene con un código de acceso breve, por lo que facilitará la vida de sus visitantes.

Espero que esto responda a tu pregunta.

    
respondido por el Cristian Stan 14.10.2016 - 10:36

Lea otras preguntas en las etiquetas