web-dev-qa-db-fra.com

get_user_meta () pour renvoyer la méta de l'utilisateur uniquement pour le blog actuel sur plusieurs sites

J'ai écrit un plugin qui permet aux utilisateurs de créer un signet pour leurs publications favorites, mais j'ai rencontré un petit problème lors de son utilisation sur un réseau multisite.

Chaque fois qu'une publication est mise en favori, l'ID de cette publication est stocké dans un tableau d'ID de la table méta de l'utilisateur actuel. Tout cela fonctionne très bien, jusqu'à ce qu'il soit utilisé sur une configuration MS.

Si vous affichez le site sur lequel les signets ont été créés, tout fonctionne parfaitement, mais lorsque vous consultez un autre site, je reçois une liste d'identifiants de publication appartenant à l'autre site. En effet, la table méta de l'utilisateur est partagée entre les sites.

Donc, ce que je dois faire est de récupérer uniquement la méta de l'utilisateur pour le site actuel. Y a-t-il un moyen de faire cela? Je ne pense pas qu'il y en ait un, alors si quelqu'un a un aperçu, ce serait génial.

5
Pippin

WordPress distingue les clés usermeta entre les sites en utilisant le préfixe de base de données pour chaque site.

Par exemple, au lieu d'utiliser la clé favorite_posts, vous utiliseriez la clé méta wp_23_favorite_posts. Pour obtenir le préfixe, vous pouvez utiliser $wpdb->get_blog_prefix().

Mais attendez, il y a en fait une API entière dédiée à cela. Plutôt que d'utiliser *_user_meta(), utilisez *_user_option(). Ceux-ci sont traduits en interne pour être contre le site individuel.

Et, il est facilement intégré dans votre plugin existant. get_user_option() vérifie d'abord une clé spécifique au site, mais s'il ne trouve rien, il se rabat sur une méta-clé à l'échelle de l'utilisateur. Alors allez-y et passez à get_user_option() et votre plugin existant fonctionnera sur un seul site sans problème.

Voici les définitions de fonction:

./wp-includes/user.php:251:function get_user_option( $option, $user = 0 )
./wp-includes/user.php:293:function update_user_option( $user_id, $option_name, $new_value )
./wp-includes/user.php:322:function delete_user_option( $user_id, $option_name )
19
Andrew Nacin

pourquoi ne pas stocker l'identifiant du blog avec le tableau de postIds, vous aurez donc quelque chose comme ceci stocké dans les métadonnées de l'utilisateur:

Array
(
   [blogid1] => Array(1,2,4,7),
   [blogid2] => Array(3,6,8,10)
)

vous pouvez utiliser le $ blog_id global pour obtenir le blogid actuel. Sur une configuration non multisite, le blogid sera 0 et devrait toujours fonctionner lorsque vous essayez d'extraire les posts du tableau en

arr [$ blog_id]

4
Brad Vincent