GoPymes's Blog

Como agregar un campo a la tabla de usuarios de WordPress?

perfil

A raíz que se me presentó un trabajo, en la cual iba a necesitar la fecha de cumpleaños de todos los usuarios registrados de WordPress, empecé mi tarea de ver como agregar ese campo sin afectar el funcionamiento del WordPress y además, que el campo puede ser editado desde el propio panel de administrador de WordPress.

Entonces empezamos con los pasos a seguir:

Paso 1 : Crearlo en la Base de Datos (MySQL).
Primero vamos al phpmyadmin y creamos el campo “fenacimiento” (en mi caso) y colocarlo último en la tabla users de wordpress.

Paso 2: Ubicar los ficheros a editar.
Por obvias razones primero vamos a agregar el campo en el formulario de edición de usuarios de wordpress, para ello editamos el fichero /wp-admin/user-edit.php

Vamos a agregar nuestro campo en cualquier lugar, pero dentro del formulario (<form>). En mi caso lo coloque a la altura de la linea 277

<!– Edicion GoPymes –>

<tr>

<th><label for=”fenacimiento”>Fecha de Nacimiento</label></th>

<td><input type=”text” name=”fenacimiento” id=”fenacimiento” value=”<?php echo $profileuser->fenacimiento ?>” /></td>

</tr>

<!– Edicion GoPymes –>

Lo mismo hacemos con el fichero /wp-admin/user-new.php

Paso 3: Capturar las variables.
Si te das cuenta, no sólo el aparece el campo en el lugar puesto sino también trae consigo la data de la BD para ese campo. Sin embargo, aun no es capaz de guardar la data en la BD ingresada desde ese panel de administrador.

Para ello debemos editar el fichero /wp-admin/incluyes/user.php y debemos buscar la función edit_user().
Esa función toma los campos enviados desde el  formulario user-edit.php en método POST y los guarda en una variable global.

Entonces, debemos indicarle que también tome nuestro campo, para ello debemos agregar un código mas o menos en donde notes que esta tomando los valores POST. En mi caso lo he agregado cerca de la linea 85

/* Edicion GoPymes */

if ( isset( $_POST[‘fenacimiento’] ) )

$user->fenacimiento = wp_specialchars( trim( $_POST[‘fenacimiento’] ));

/* Edicion GoPymes */

Paso 4 : Hacer que el WordPress actualice
Ahora vamos a hacer que el motor de wordpress tome la variable y actualice (o inserta) en la Base de datos. Para ello vamos a editar el fichero /wp-includes/registration.php (si me preguntan porque este fichero esta fuera de la carpeta /wp-admin pues no lo sé)  y buscamos la función wp_insert_user().

Vamos a agregar nuestro campo, en mi caso, cerca de la linea 150

/* Edicion GoPymes */

if ( empty($fenacimiento) )

$fenacimiento = ”;

$fenacimiento = apply_filters(‘pre_fenacimiento’, $fenacimiento);

/* Edicion GoPymes */

Luego en ese mismo fichero vamos a agregar el campo a la lista (un array).

/* Edicion GoPymes */

$data = compact( ‘user_pass’, ‘user_email’, ‘user_url’, ‘user_nicename’, ‘display_name’, ‘user_registered’, ‘fenacimiento’ );

/* Edicion GoPymes */

Y finalmente (por fin), vamos a agregar el campo a la función que actualiza.

/* Edicion GoPymes */

update_usermeta( $user_id, ‘fenacimiento’, $fenacimiento );

/* Edicion GoPymes */

Y ya esta!, el wordpress ya actualiza tu campo.

Comments 7

  1. edgardo says:

    Estimado, como hago para publicar el cumpleanos, que cargue mediante el metodo que mostraste, en un widget o en una pagina. Te agradeceria esto eternamente… Muchas gracias

  2. Alexander says:

    Eh! eso es una buena pregunta!

    Bueno si seguiste los pasos, este puede ser accedido por una sentencia SQL.

    Pero no te preocupes, este es un post del 2009, a la actualidad WordPress tiene funciones del CODEX que permiten agregar un campo en una simple linea como por ejemplo la funcion add_meta_box() o add_action('show_user_profile', 'funcion-que-agrega-campo');

    Si deseas puedes ver la estructura de un plugin que agrega campo nuevo al apartado del post o al apartado del usuario.

    http://blog.gopymes.pe/wordpress-plugin-simple-go

    Ahora, la buena noticia es que hay plugins que sirven justo para este fin, agregar campos nuevos:

    http://wordpress.org/extend/plugins/custom-field-http://wordpress.org/extend/plugins/more-fields/i

    Saludos

  3. edgardo says:

    Te agradezco muchisimo la respuesta, lo voy a implementar….

  4. Adrian says:

    Hola, estoy haciendo la prueba de tu tutorial, pero fijate, que ahora el archivo /wp-includes/registration.php no existe, sabrás alguna manera de que wp guarde lo que escribas en los campos? saludos

  5. Alexander says:

    Adrian que tal: Como comenté lineas arriba ahora hay formas más faciles de implementar un campo sin necesidad de modificar archivos del Core.

    Las funciones add_meta_box() o add_action(‘show_user_profile’, ‘funcion-que-agrega-campo’) cumplen tal tarea.

    O si deseas puedes agregar plugins que lo hacen por ti

    http://wordpress.org/extend/plugins/custom-field-http://wordpress.org/extend/plugins/more-fields/i

  6. Alejandro says:

    Hola todos… me llegoa pasar lo mismo que mi amigo Adrian acerca de como agrgar los campos adicionales y pues alexander dio la solucion y es perfecta… pero ahora tengo una duda… quiero agregar un campo categoria el cual ya siguiendo los pasos que aqui explican aparece cuando edito el perfil pero como hago si quiero que este campo me aparezca cuando voy a añadir un nuevo usuario desde la administracion de wrodpress. no es crear un nuevo form es añadir ese campo al formulario de añadir usuario del adminitrador de wordpress..

    en lo que me puedan colaborar les estaré bastante agradecido.

Leave a Reply

Your email address will not be published. Required fields are marked *