wp_update_user não atualiza e update_user_meta faz

2

Estou criando uma página de perfil de usuário onde os usuários podem atualizar seu perfil no front-end. O perfil do usuário é estendido com alguns campos personalizados, como 'Twitter', 'Facebook' e 'Cidade'.

O código a seguir atualiza com êxito todos os detalhes do usuário, exceto o 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) ;

Eu tentei usar update_user_meta para atualizar dCity e funcionou:

$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'] );

Então, o problema foi resolvido, mas estou me perguntando por que wp_update_user não atualiza todos os registros? Estou fazendo algo errado?

Com antecedência, obrigado.

    
por Tomas 24.03.2013 / 09:31

1 resposta

7

wp_update_user & metadados

wp_update_user atualiza os registros na tabela * _ users . Não é necessário atualizar os metadados personalizados na tabela * _ usermeta .

Por isso, o seu "problema" é, na verdade, o comportamento esperado.

O argumento $userdata passado para wp_update_user pode conter os seguintes campos:

ID, user_pass, user_login, nome_do_usuário, user_url, user_email, display_name, apelido, first_name, last_name, descrição, rich_editing, user_registered, função, show_admin_bar_front

Além disso, ele aceita metadados reconhecidos como "método de contato". Isso salvará na tabela * _ usermeta .

Por padrão, esses são jabber , objetivo & yim .

Estes podem, no entanto, ser alterados / anexados por meio do filtro 'user_contactmethods' . Quanto à questão levantada nos comentários, é provável que o twitter & Os metadados do Facebook foram salvos via wp_update_user .

Quaisquer metadados adicionais devem ser salvos como tal com as funções apropriadas.

Como isso acontece no núcleo?

Isto apenas como um aparte:

wp_update_user chama _get_additional_user_keys , que por sua vez chama _wp_get_user_contactmethods . Os metakeys resultantes são repetidos em wp_update_user e se um valor existir adicionado ao * _ usermeta table via update_user_meta .

Para referência, veja Linha 1426 e depois (a partir de 3.5.1) de /wp-includes/user.php

    
por Johannes Pille 24.03.2013 / 10:20

Tags