wp_update_user no se actualiza y update_user_meta sí lo hace

2

Estoy creando una página de perfil de usuario donde los usuarios podrían actualizar su perfil en el front-end. El perfil de usuario se amplía con algunos campos personalizados, como 'Twitter', 'Facebook' y 'Ciudad'.

El siguiente código actualiza con éxito todos los detalles del usuario, excepto el dCity :

$user_fields = array(
 'ID'           => $current_user->ID,
 'nickname'     => esc_attr($_POST['nickname']),
 'first_name'   => esc_attr($_POST['first_name']),
 'last_name'    => esc_attr($_POST['last_name']),
 'display_name' => esc_attr($_POST['display_name']),
 'user_email'   => esc_attr($_POST['email']),
 'user_url'     => esc_attr($_POST['url']),
 'twitter'      => esc_attr($_POST['twitter']),
 'facebook'     => esc_attr($_POST['facebook']),
 'description'  => esc_attr($_POST['description']),
 'dCity'        => esc_attr($_POST['dCity'])
);

wp_update_user($user_fields) ;

Intenté usar update_user_meta para actualizar dCity y funcionó:

$user_fields = array(
 'ID'           => $current_user->ID,
 'nickname'     => esc_attr($_POST['nickname']),
 'first_name'   => esc_attr($_POST['first_name']),
 'last_name'    => esc_attr($_POST['last_name']),
 'display_name' => esc_attr($_POST['display_name']),
 'user_email'   => esc_attr($_POST['email']),
 'user_url'     => esc_attr($_POST['url']),
 'twitter'      => esc_attr($_POST['twitter']),
 'facebook'     => esc_attr($_POST['facebook']),
 'description'  => esc_attr($_POST['description'])
);

wp_update_user($user_fields);
update_user_meta( $current_user->ID, 'dCity', $_POST['dCity'] );

El problema se resolvió, pero me pregunto por qué wp_update_user no actualiza todos los registros. ¿Estoy haciendo algo mal?

De antemano, gracias.

    
pregunta Tomas 24.03.2013 - 09:31

1 respuesta

7

wp_update_user & metadatos

wp_update_user actualiza los registros en la tabla * _users . No tiene la intención de actualizar los metadatos personalizados en la tabla * _usermeta .

Por lo tanto, su "problema" es el comportamiento esperado.

El argumento $userdata pasado a wp_update_user puede contener los siguientes campos:

ID, user_pass, user_login, user_nicename, user_url, user_email, display_name, nickname, first_name, last_name, description, rich_editing, user_registered, role, show_admin_bar_front

Además, acepta los metadatos que se reconocen como un "método de contacto". Esto se guardará en la tabla * _usermeta .

De forma predeterminada, son jabber , aim & yim .

Sin embargo, estos pueden modificarse / agregarse mediante el filtro 'user_contactmethods' . En cuanto a la pregunta planteada en los comentarios, es probable que Twitter & Los metadatos de Facebook se han podido guardar a través de wp_update_user .

Cualquier metadata adicional debe guardarse como tal con las funciones apropiadas.

¿Cómo sucede en el núcleo?

Esto solo como un aparte:

wp_update_user llama a _get_additional_user_keys que a su vez llama a _wp_get_user_contactmethods . Los metakey resultantes se repiten en wp_update_user y si existe un valor agregado a * _usermeta table a través de update_user_meta .

Para referencia, vea Línea 1426 y después (a partir de 3.5.1) de /wp-includes/user.php

    
respondido por el Johannes Pille 24.03.2013 - 10:20

Lea otras preguntas en las etiquetas