Cómo desarrollar un sitio de membresía con WordPress Parte 3

Lo que vas a crear

Anteriormente en la serie, explicamos cómo personalizar los formularios de registro e inicio de sesión de WordPress. Luego agregamos algunos campos personalizados a nuestro formulario de registro. Hoy, en la tercera y última parte de esta serie, veremos cómo desarrollar una sección de "mi cuenta" para los usuarios de su sitio, donde los usuarios pueden editar la información de su perfil.. 

Configurar página

Lo primero que queremos hacer es crear una Plantilla de página para alojar nuestro contenido. Me gusta prefijar las plantillas de mi página con la palabra "plantilla". Así que mi archivo se llama template-user-profile.php y el PHP de apertura se ve así: 

He guardado esto en la raíz de mi directorio de temas. Si no está familiarizado con las plantillas de página de WordPress, le sugiero que lea el enlace de arriba. Son extremadamente prácticos.

Ahora vamos al extremo posterior de WordPress y hagamos una página llamada "perfil", y en la Atributos de página meta box le asignamos nuestra plantilla de página recién creada. Una vez que haya publicado esta página, debe tener una página en blanco en la parte delantera: http: // sudominio / perfil. 

Ahora para inyectar algo de contenido en nuestra página. Queremos que la estructura sea el contenido de la página (es decir, lo que está escrito en WordPress WYSIWYG) y luego nuestro formulario de perfil para seguir. 

A menudo es útil obtener el código de page.php y utilizarlo como punto de partida para sus Plantillas de página. Este código difiere un poco dependiendo de su tema, pero lo más probable es que contenga un bucle que escupa algo del contenido de la página. La parte de contenido normalmente se obtiene mediante la función de WordPress get_template_part (). Justo debajo de donde se ha recuperado el contenido, insertemos nuestro formulario HTML. Así que para recapitular:

  1. Copia y pega el código de page.php en nuestra plantilla de página.
  2. Encuentra dónde se está emitiendo el contenido.
  3. Justo debajo de eso, inserte el siguiente código y luego lo veremos:

No hay nada loco aquí: el formulario utiliza el marcado de Bootstrap ya que nuestro tema se basa en Bootstrap. Otras cosas a tener en cuenta es que el formulario se envía mediante el método POST y hemos incluido un wp_nonce_field; este es un tipo de token de seguridad que ayuda a prevenir ataques maliciosos. Si no está familiarizado con los conceptos de WordPress, le sugiero que lea este artículo.. 

Recuperando los datos

Con eso en su lugar, debe tener un formulario en la parte frontal del sitio, pero no está haciendo mucho. Queremos que muestre los datos que tenemos para el usuario que ha iniciado sesión. Es posible que haya notado que los atributos de valor en nuestro formulario están haciendo eco de algunos PHP. 

valor = "nombre de pila; ?> "

Ahora que $ user_info El objeto no existe porque aún no hemos escrito el código, así que comencemos allí. Pegue el siguiente código antes de nuestro formulario en template-user-profile.php.

Usando algunas funciones nativas de WordPress, obtiene la ID del usuario actual, y con eso podemos obtener los datos del usuario. Esto se almacena en un objeto llamado $ user_info, y como se demostró anteriormente, podemos recuperar datos de usuarios con bastante facilidad. Para ver todos los datos almacenados en ese objeto, puede ejecutar un var_dump al igual que: . Esto puede ser útil para la depuración o simplemente para ver a qué puede acceder. 

Procesando los datos

Hay una pieza final en el rompecabezas, y es procesar los datos, lo que permite a los usuarios editar sus perfiles. Con el fin de mantener las cosas organizadas, he puesto el código de membresía en un archivo apropiadamente llamado membership.php. Esto esta en el lib directorio y se ha incluido en nuestro archivo functions.php. Una vez que haya hecho esto, abra su archivo membership.php recién creado en un editor de código, y hagamos la función que procesará los datos de los usuarios. 

Primero, repasemos rápidamente la lógica. Cuando se pulsa el botón de enviar, queremos comprobar que se ha enviado nuestro campo nonce; esto verifica que los datos provienen del lugar correcto. 

Si se cumple esa condición, queremos obtener el ID del usuario actual, ya que lo necesitaremos para almacenar los datos. Luego queremos organizar nuestros datos en una estructura que le guste a WordPress, en este caso es una matriz con claves específicas. Antes de guardar los datos, también queremos validarlos y desinfectarlos. Y por último queremos mostrar mensajes a nuestro usuario, ya sea de éxito o errores..

Y el código para todo lo que parece algo así:

 sanitize_text_field ($ _POST ['first_name']), 'last_name' => sanitize_text_field ($ _POST ['last_name']), 'user_email' => sanitize_fieldemail ($ _POST ['email']), 'twitter_name' => sanitize_text_field ( $ _POST ['twitter_name']), 'user_pass' => $ _POST ['pass1'],); if (! empty ($ user_data ['user_pass'])) // Valide las contraseñas para verificar que sean las mismas. if (strcmp ($ user_data ['user_pass'], $ _POST ['pass2'])! == 0) wp_redirect ('? password-error = true'); salida;  else else // Si los campos de contraseña no están configurados, no se guarde. unset ($ user_data ['user_pass']);  // Guardar los valores en la publicación. foreach ($ user_data as $ key => $ value) $ results = "; // http://codex.wordpress.org/Function_Reference/wp_update_user if ($ key == 'twitter_name') $ results = update_user_meta ($ user_id, $ key, $ value); unset ($ user_data ['twitter_name']); elseif ($ key == 'user_pass') wp_set_password ($ user_data ['user_pass'], $ user_id); unset ($ user_data ['user_pass']); else // Guarde los valores restantes. $ results = wp_update_user (array ('ID' => $ user_id, $ key => $ value)); if (! is_wp_error ($ results) ) wp_redirect ('? profile-updated = true'); wp_redirect ('? profile-updated = false'); exit; add_action ('tutsplus_process_user_profile', 'tutsplus_process_user_profile_data');

Ahora puede notar que los datos se guardan utilizando tres funciones diferentes de WordPress:

  • update_user_meta () para el nombre de Twitter
  • wp_set_password () para la contraseña
  • wp_update_user () para los datos restantes

Y tienes razón en cuestionar esto. Básicamente, los metadatos personalizados (el nombre de Twitter) deben procesarse utilizando la función relativa y no la función de actualización general del usuario. En cuanto a la contraseña, si bien puede trabajar con wp_update_user (), He tenido problemas con él y prefiero usar este método. Recuerde que esto es solo una guía y, a menudo, el código apunta a demostrar diferentes métodos para cumplir con sus requisitos. 

Bien, ahora tenemos nuestra función para procesar los datos, pero no se llama a ninguna parte. Al final de nuestra función puedes ver que hay una acción asociada con ella. Entonces para llamar a esa función solo necesitamos usar el WordPress provisto: do_action () ;. Así que pegue esta línea sobre su formulario en la plantilla de página de perfil de usuario que creamos anteriormente:

Con eso en su lugar, cuando enviemos nuestro formulario, deberá ejecutar nuestra función y procesar los datos.. 

Mensajes de error y éxito

Nuestro formulario de perfil debe guardar o rechazar los datos ahora. Quizás las dos contraseñas no eran las mismas y no se guardaban. No hay mensajes para proporcionar comentarios de los usuarios. Salvemos a nuestros usuarios un poco de dolor y les demos algunos mensajes.. 

En nuestro tutsplus_process_user_profile () Es posible que haya notado que agrega diferentes cadenas de consulta a la URL en función del resultado del procesamiento. Entonces, si todo está guardado y es exitoso, entonces nuestra URL se agregará con ?profile-updated = true, y estos varían en función de los resultados. Lo que debemos hacer es desencadenar un mensaje basado en estas respuestas. 

A continuación, he usado un filtro para agarrar el contenido y, a través de la magia de $ _GET Podemos revisar los parámetros y escupir lo que necesitamos. 

Bueno, no del todo, estamos usando una función llamada tutsplus_get_message_markup () arriba, pero aún no lo hemos definido. Lleva en dos parámetros:

  • una cadena: el mensaje a mostrar
  • una cadena: la severidad de la alerta para mostrar basada en Bootstrap  

Así que vamos a definir nuestra tutsplus_get_message_markup () función:

'; $ salida. = ''; $ salida. = '

'. $ mensaje. '

'; $ salida. = '
'; devuelve $ output;

Genial. Ahora nuestros miembros pueden ver si sus datos se están guardando o no. 

Crédito adicional

Así que ahora tenemos un prototipo de trabajo para un sitio de membresía. Gran parte de esta funcionalidad se incluye con WordPress, pero la hemos diseñado y mejorado para que sea una mejor experiencia para nuestros usuarios. Así que ahora salpiquemos nuestro 'yo' y crucémoslo para mejorar la experiencia un poco más. 

En primer lugar, queremos evitar que los usuarios que no han iniciado sesión puedan acceder a la página de perfil. Una simple redirección a la página de inicio será suficiente. Hice una función que hace precisamente eso, y la llamo en páginas a las que quiero que accedan exclusivamente los usuarios que han iniciado sesión. 

Aquí está la función, que se coloca en membership.php: 

Ahora podemos simplemente llamar a la función en la parte superior de nuestra plantilla de página de perfil de usuario. 

A continuación queremos mantener bien a los usuarios, suscriptores.-fuera del área de administración. Y encima de eso, vamos eliminar la barra de administración para usuarios registrados. Nuevamente pongamos esto en nuestra membresía. Php.

Y, por último, no es muy fácil navegar por las pantallas de inicio / cierre de sesión. Vamos a añadir algunos navegación específica del usuario. Lo que he hecho es crear una función que genere el código relevante, y esto se llama en nuestras plantillas / header.php donde se representa la navegación principal. 

'; if (is_user_logged_in ()) echo '
  • '; eco '' . $ welcome_message. ''; eco '
  • '; eco '
  • '; eco '' . __ ('Cerrar sesión', 'sabio'). ''; eco '
  • '; else echo '
  • '; eco '' . __ ('Iniciar sesión', 'sabio'). ''; eco '
  • '; eco '';

    Resumen

    WordPress es una base increíble para una aplicación de membresía. Ya tiene mucha de la funcionalidad asociada con este tipo de aplicación. Además de eso, la gente de WordPress ha hecho que sea muy fácil conectar eventos y filtrar contenido para que podamos extender lo que ya está allí. 

    Espero que esto le haya proporcionado los métodos, ideas y conocimientos para desarrollar sus propios sitios de membresía. Esto no es de ninguna manera una guía completa sobre este tema, sino que sirve como base.

    Cualquier comentario es bienvenido, y haré todo lo posible para responder cualquier pregunta en los comentarios..

    Cosas a tener en cuenta

    Tenga en cuenta: si está descargando el código del repositorio de GitHub, incluye todos los archivos para obtener su tema en marcha. ¡La idea es que puedas agarrar el repositorio y simplemente ejecutar los comandos necesarios de Gulp y Bower y estarás lejos! Si solo desea los archivos que contienen código específico para esta serie, los archivos se enumeran a continuación: 

    • Todos los archivos en el directorio de administración.  
    • lib / admin.php 
    • lib / membership.php
    • plantilla-usuario-perfil.php