web-dev-qa-db-fra.com

update_user_meta ajoute de la valeur en haut de la valeur existante

Je travaille sur un plugin qui permettra aux utilisateurs de créer des auteurs favoris sur le site WP.

Lorsque vous cliquez sur le bouton Favoris cet auteur, il envoie l'identifiant de l'auteur à la fonction ci-dessous et enregistre cette valeur dans la base de données.

Vous trouverez ci-dessous le code que j’enregistre dans FAV_AUTHORS_META_KEY dans la table wp_usermeta.

$user_id = fav_authors_get_user_id();
$fav_author_id = 2;
update_user_meta( $user_id, FAV_AUTHORS_META_KEY, $fav_author_id );

Si j'ai l'ID auteur 2, cela sera enregistré sur la base de données. Cependant, lorsque j'envoie un ID auteur différent, update_user_meta remplacera la valeur existante au lieu d'ajouter la nouvelle valeur.

Comment puis-je faire en sorte de conserver la valeur existante et d'ajouter une nouvelle valeur par-dessus?

1
Ohsik

Il n'y a pas de fonctionnalité intégrée pour ajouter des méta-valeurs dont vous aurez besoin pour le faire manuellement. Si vous envisagez d'ajouter plusieurs valeurs, je vous suggère de l'enregistrer en tant que tableau, mais il sera sérialisé dans la base de données, ce qui rendra plus difficile son exécution WP_Meta_Query sur .

$user_id        = fav_authors_get_user_id();
$fav_author_id  = 2;
$author_list    = get_user_meta( $user_id, FAV_AUTHORS_META_KEY, true );

if( empty( $author_list ) ) {   // There was no meta_value, set an array.
    update_user_meta( $user_id, FAV_AUTHORS_META_KEY, array( $fav_author_id ) );
} else {
    $author_arr = ( is_array( $author_list ) ) ? $author_list : array( $author_list );  // Added in case current value is not an array already.
    $author_arr[] = $fav_author_id;
    update_user_meta( $user_id, FAV_AUTHORS_META_KEY, $author_arr );
}

Je suppose que ce que vous avez actuellement en place n’est pas un tableau, j’ajoute donc une condition inline-conditionnelle dans l’instruction else pour convertir les valeurs individuelles en tableau. Notez que vous devez passer true à get_user_meta() afin qu'il désérialise notre tableau.

2
Howdy_McGee