Hoy creé un nuevo complemento para ti. Un complemento que se ocupa de los métodos de contacto de los usuarios. Básicamente, cuando edita un usuario en la administración, hay un bloque de «información de contacto». Bueno, me gustaría mostrarle cómo agregar sus propios campos allí y, para ir un poco más allá, cómo mostrar (o no) estos nuevos campos en la página de registro.
Aquí hay una vista previa de lo que vamos a crear:
Y para hacerlo, como de costumbre, ¡vamos a crear un complemento agradable y simple!
Paso 1: crea el complemento
Cree una nueva carpeta en wp-content / plugins y llámelo «custom-user-contact-methods». Dentro de esta carpeta recién creada, cree un archivo llamado “rc-custom-user-contact-methods.php” y ábralo en su software de edición favorito.
Coloque este contenido en su archivo vacío. Este código simplemente registra el complemento:
<?php
/*
Plugin Name: Custom User Contact Methods
Plugin URL: http://remicorson.com/
Description: Add custom fields to users "contact" section
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
*/
Paso 2: defina sus campos personalizados
A continuación, necesitamos crear una variable que contendrá nuestros campos personalizados, los que se usarán en la página de edición del usuario y también en la página predeterminada de registro. Guardemos estos campos en una variable llamada $ extra_fields.
$extra_fields = array(
array( 'facebook', __( 'Facebook Username', 'rc_cucm' ), true ),
array( 'twitter', __( 'Twitter Username', 'rc_cucm' ), true ),
array( 'googleplus', __( 'Google+ ID', 'rc_cucm' ), true ),
array( 'linkedin', __( 'Linked In ID', 'rc_cucm' ), false ),
array( 'pinterest', __( 'Pinterest Username', 'rc_cucm' ), false ),
array( 'wordpress', __( 'WordPress.org Username', 'rc_cucm' ), false ),
array( 'phone', __( 'Phone Number', 'rc_cucm' ), true )
);
Estamos almacenando cada campo dentro de una matriz que tiene 3 parámetros, el primero es el ID del campo, el segundo es la etiqueta del campo y el último es una información booleana que define si el campo se muestra en la página de registro o no. . Puede agregar tantos parámetros como desee, por ejemplo, un marcador de posición o una información requerida.
Paso 3: Enganche el filtro correcto
Ahora necesitamos conectar una función al filtro correcto. En nuestro caso específico, el filtro es “user_contactmethods”, y el nombre de la función que vamos a crear es “rc_add_user_contactmethods”.
// Use the user_contactmethods to add new fields
add_filter( 'user_contactmethods', 'rc_add_user_contactmethods' );
Paso 4: Cree nuestros campos personalizados
Ahora necesitamos crear la función «rc_add_user_contactmethods». Es el que agregará nuestros campos personalizados a la página de edición del usuario. La buena noticia es que almacenamos nuestros campos dentro de una matriz, lo que significa que la siguiente función será completamente dinámica y será bastante fácil agregar nuevos campos simplemente modificando la variable $ extra_fields.
/**
* Add custom users custom contact methods
*
* @access public
* @since 1.0
* @return void
*/
function rc_add_user_contactmethods( $user_contactmethods ) {
// Get fields
global $extra_fields;
// Display each fields
foreach( $extra_fields as $field ) {
if ( !isset( $contactmethods[ $field[0] ] ) )
$user_contactmethods[ $field[0] ] = $field[1];
}
// Returns the contact methods
return $user_contactmethods;
}
En este paso, si guarda y activa el complemento, debería ver sus campos personalizados en la página de edición del usuario. Como estamos usando el gancho correcto, no tenemos que crear un campo de «guardar» datos. Entonces, el complemento está funcionando muy bien por el momento. Pero me gustaría ir un poco más allá y agregar la opción para mostrar esos campos en la página de registro. Asegúrese de marcar en la configuración la casilla de verificación «Cualquiera puede registrarse»; de lo contrario, no podrá ver el enlace «Registrarse».
Paso 5: Ganchos de la página de registro
Para agregar nuestros campos en la página de registro, necesitamos acceder al menos a dos ganchos y crear dos funciones. Uno para mostrar los campos y el segundo para guardar los datos de los campos en la base de datos.
Enganchemos nuestras funciones:
// Add our fields to the registration process
add_action( 'register_form', 'rc_register_form_display_extra_fields' );
add_action( 'user_register', 'rc_user_register_save_extra_fields', 100 );
Paso 6: Mostrar la página de registro de campos personalizados
En el código anterior declaramos dos funciones. El primero es mostrar los campos en la página de registro. En esta parte debemos ocuparnos del tercer parámetro de cada matriz en $ extra_fields. Este parámetro booleano indica si los campos deben mostrarse o no. Verdadero: se muestra el campo, falso: no se muestra el campo.
/**
* Show custom fields on registration page
*
* Show custom fields on registration if field third parameter is set to true
*
* @access public
* @since 1.0
* @return void
*/
function rc_register_form_display_extra_fields() {
// Get fields
global $extra_fields;
// Display each field if 3th parameter set to "true"
foreach( $extra_fields as $field ) {
if ( $field[2] == true ) {
$field_value = isset( $_POST[ $field[0] ] ) ? $_POST[ $field[0] ] : '';
echo '<p>
<label for="'. esc_attr( $field[0] ) .'">'. esc_html( $field[1] ) .'<br />
<input type="text" name="'. esc_attr( $field[0] ) .'" id="'. esc_attr( $field[0] ) .'" class="input" value="'. esc_attr( $field_value ) .'" size="20" /></label>
</label>
</p>';
} // endif
} // end foreach
}
Paso 7: Almacene los valores de los campos en el proceso de registro
Ahora que nuestros campos se muestran en la página de registro, necesitamos almacenar sus valores en la base de datos. Este es el objetivo de la función «rc_user_register_save_extra_fields». Para hacerlo, necesitamos usar el «wp_update_user ()”Función.
/**
* Save field values
*
* @access public
* @since 1.0
* @return void
*/
function rc_user_register_save_extra_fields( $user_id, $password = '', $meta = array() ) {
// Get fields
global $extra_fields;
$userdata = array();
$userdata['ID'] = $user_id;
// Save each field
foreach( $extra_fields as $field ) {
if( $field[2] == true ) {
$userdata[ $field[0] ] = $_POST[ $field[0] ];
} // endif
} // end foreach
$new_user_id = wp_update_user( $userdata );
}
Conclusión
Bueno, vimos los conceptos básicos de cómo agregar nuevos campos a los métodos de contacto del usuario, pero eso es todo. Por ejemplo, puede eliminar campos existentes como «Yahoo IM», «AIM» y «Jabber» haciendo un simple desarmado (). Pero también puedes agregar algunas funciones para desinfectar tus campos personalizados con el fin de comprobar, por ejemplo, si el número de teléfono tiene un formato adecuado, si un campo es obligatorio o no, etc etc… ¡No dudes en preguntar por características específicas en los comentarios!
Ah, y una última cosa … si desea mostrar los datos de cualquiera de sus campos, simplemente use esto:
// Param 1 is user ID
// Param 2 is field ID
// Param 3 is there to get a var or an array
echo get_user_meta( 1, 'twitter', true );