Crear un CRM simple en WordPress crear campos personalizados

En esta serie, hemos estado viendo cómo crear un sistema de CRM simple en WordPress. En la primera parte de esta serie, creamos un Complemento de WordPress que registró un Tipo de publicación personalizada de "Contactos", pero aún tenemos que cubrir cómo almacenar información adicional para un Contacto.

Creación de campos personalizados

WordPress tiene la add_meta_box () función, que permite a los desarrolladores de complementos y temas registrar cajas de metadatos personalizadas en varias pantallas de administración de WordPress.

WordPress registra algunos de sus propios metacuadros para mostrar cuando crea una publicación o una página. Por ejemplo, en Páginas, tiene la Atributos de página cuadro de meta

Añadamos un meta box a nuestro Contactos tipo de mensaje personalizado. Abra el archivo de complemento que creó en el primer tutorial de esta serie. Luego, en el constructor del complemento, actualice el código para que coincida con el siguiente. Esto registra nuestra register_meta_boxes () función contra el add_meta_boxes acción:

/ ** * Constructor. Se llama cuando se inicializa el complemento * / function __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('add_meta_boxes', array ($ this, 'register_meta_boxes')); 

A continuación, en nuestro register_meta_boxes () función, añadimos una llamada a add_meta_box (). Esto le dice a WordPress que queremos un meta box llamado Detalles de contacto, el cual es rendido por nuestro output_meta_box () función. Agregue el siguiente código después de la función de constructor:

/ ** * Registra un Meta Box en nuestro Tipo de mensaje personalizado de contacto, llamado 'Detalles de contacto' * / function register_meta_boxes () add_meta_box ('detalles de contacto', 'Detalles de contacto', matriz ($ this, 'output_meta_box'), 'contacto', 'normal', 'alto'); 

Por último, necesitamos un output_meta_box () función, que es llamada por add_meta_box encima. Agregue el siguiente código después de register_meta_boxes () función:

/ ** * Generar un meta box de Detalles de contacto * * @param WP_Post $ post WordPress Post objeto * / function output_meta_box ($ post) 

Vamos a comprobar que tenemos un cuadro de meta que aparece en nuestro Contactos tipo de mensaje personalizado. Crea un nuevo contacto en el panel de WordPress yendo a Contactos> Añadir Nuevo.

Si todo se ha escrito correctamente, debería ver algo similar a la captura de pantalla de seguimiento:

Poblando la caja de meta con un campo

Continuemos y agreguemos un campo de dirección de correo electrónico a este meta box. Cambia tu output_meta_box Función para el siguiente código:

/ ** * Enviar un meta box de Detalles de contacto * * @param WP_Post $ post WordPress Post objeto * / function output_meta_box ($ post) // Etiqueta de salida y eco de campo (''); eco ( '');  

Guarde el código de su complemento y vuelva a cargar la pantalla Agregar contacto. Debería ver nuestro nuevo campo de Dirección de correo electrónico aparecer en el cuadro de detalles de contacto:

Guardar datos de campos personalizados

Todavía no hemos terminado. Necesitamos decirle a WordPress que guarde el contenido que un usuario ingresa en este campo. En WordPress, hacemos esto registrando una función contra la save_post acción.

Como con la mayoría de las acciones, registraremos nuestra acción en el constructor del complemento:

/ ** * Constructor. Se llama cuando se inicializa el complemento * / function __construct () add_action ('init', array ($ this, 'register_custom_post_type')); add_action ('add_meta_boxes', array ($ this, 'register_meta_boxes')); add_action ('save_post', array ($ this, 'save_meta_boxes')); 

A continuación, vamos a crear nuestra save_meta_boxes () función:

/ ** * Guarda los datos del campo de la meta caja * * @param int $ post_id Post ID * / function save_meta_boxes ($ post_id) // Marque este es el Tipo de mensaje personalizado de contacto if ('contact'! = $ _POST ['post_type ']) return $ post_id;  // Compruebe que el usuario que inició sesión tiene permiso para editar esta publicación si (! Current_user_can ('edit_post', $ post_id)) return $ post_id;  // Aceptar para guardar metadatos $ email = sanitize_text_field ($ _POST ['contact_email']); update_post_meta ($ post_id, '_contact_email', $ email); 

Esta función realiza varias acciones, porque la save_post WordPress y otros complementos pueden llamar a la acción con bastante frecuencia (por ejemplo, cuando se guarda automáticamente un borrador o se guarda un tipo de mensaje diferente). Debemos asegurarnos de que solo guardamos nuestros datos de campo personalizados si el usuario guardó o actualizó un Contacto.

Si estamos guardando un contacto, desinfectamos la dirección de correo electrónico. Desde el códice de WordPress:

Comprobaciones de UTF-8 no válido, Convertir solo < characters to entity, strip all tags, remove line breaks, tabs and extra white space, strip octets.

En resumen, nos aseguramos de que no haya un formato original en nuestra cadena de texto.

Finalmente, almacenamos la dirección de correo electrónico en los metadatos de la publicación, usando update_post_meta. Piense en el meta meta como una serie de pares clave / valor que se adjuntan a una publicación. Puedes tener tantos o tantos como quieras. En nuestro ejemplo, almacenamos el valor de nuestro campo personalizado contra la clave _Email de contacto.

Lectura de datos de campo personalizados

Crear un nuevo Contacto e ingrese una dirección de correo electrónico. Guarde el nuevo contacto y se dará cuenta de que la dirección de correo electrónico no aparece en el campo:

Necesitamos editar nuestro output_meta_box () función para leer el meta de publicación, y mostrarlo en el campo de entrada. Cambiar el output_meta_box () Función para el siguiente código:

/ ** * Enviar un meta box de Detalles de contacto * * @param WP_Post $ post WordPress Post objeto * / function output_meta_box ($ post) $ email = get_post_meta ($ post-> ID, '_contact_email', verdadero); // Etiqueta de salida y eco de campo (''); eco ( '');  

Usamos get_post_meta () para obtener el valor para la ID de publicación dada y la combinación de claves meta Sabemos que la meta clave es _Email de contacto, ya que eso es lo que usamos cuando guardamos el valor del campo personalizado en update_post_meta ()

Seguridad

La seguridad es extremadamente Importante a la hora de enviar y manejar los datos del formulario. Necesitamos saber que la fuente de nuestros datos es confiable al guardarlos. Si no podemos confiar en la fuente de nuestros datos, no debemos almacenarlos: los datos pueden estar comprometidos o corrompidos de una manera para tratar de explotar un error o una falla de seguridad..

WordPress nos proporciona nonces (un "número usado una vez"), que se pueden enviar junto con los datos del formulario. Este nonce se puede verificar cuando nuestra rutina de guardado se ejecuta, para garantizar que coincida con el valor que esperábamos.

Esto ayuda a prevenir ataques de falsificación de solicitudes entre sitios (CSRF), es decir, alguien que intenta enviar datos de formularios a nuestra rutina de guardar desde un sitio web diferente.

Necesitamos agregar seguridad al código anterior en dos lugares:

  1. output_meta_box (): agregar un valor nonce al formulario
  2. save_meta_boxes (): verificar un valor nonce enviado

Vamos a editar el output_meta_box () Función, reemplazándolo con el siguiente código:

/ ** * Enviar un meta box de Detalles de contacto * * @param WP_Post $ post WordPress Post objeto * / function output_meta_box ($ post) $ email = get_post_meta ($ post-> ID, '_contact_email', verdadero); // Agregar un campo nonce para que podamos verificarlo más tarde. wp_nonce_field ('save_contact', 'contacts_nonce'); // Etiqueta de salida y eco de campo (''); eco ( ''); 

Esto utiliza wp_nonce_field (), para generar un campo oculto llamado contacts_nonce, con una acción llamada guardar_contacto. Su valor es generado por WordPress..

A continuación, vamos a editar la rutina de guardar en save_meta_boxes ():

/ ** * Guarda los datos del campo de meta box * * @param int $ post_id Post ID * / function save_meta_boxes ($ post_id) // Compruebe si nuestro nonce está configurado. if (! isset ($ _POST ['contacts_nonce'])) return $ post_id;  // Verificar que el nonce sea válido. if (! wp_verify_nonce ($ _POST ['contacts_nonce'], 'save_contact')) return $ post_id;  // Marque este es el Tipo de mensaje personalizado de contacto if ('contact'! = $ _POST ['post_type']) return $ post_id;  // Compruebe que el usuario que inició sesión tiene permiso para editar esta publicación si (! Current_user_can ('edit_post', $ post_id)) return $ post_id;  // Aceptar para guardar metadatos $ email = sanitize_text_field ($ _POST ['contact_email']); update_post_meta ($ post_id, '_contact_email', $ email); 

Esto agrega dos cheques a nuestra rutina de guardar:

  1. Compruebe que se haya establecido un campo nonce en nuestro formulario. Si no, no guardes nada.
  2. Compruebe que el valor del campo nonce es lo que esperamos. Si no, no guardes nada.

Crea o edita tu Contacto, y asegúrese de que la dirección de correo electrónico se está guardando ahora.

Hasta la próxima…

En el siguiente artículo, vamos a utilizar Campos personalizados avanzados para agregar campos personalizados a nuestros Contacto tipo de publicación personalizada, lo que nos permite crear una interfaz de usuario enriquecida con una gama más amplia de tipos de entrada.