J'essaie d'obtenir tous les utilisateurs affectés à un usermeta personnalisé. Je sais que get_users()
est censé fonctionner; Cependant, cela ne semble pas fonctionner. Ce que j'ai est un usermeta stockant un ID de catégorie et j'essaie d'utiliser 'meta_value' => $cat_id
pour interroger la base de données. C'est donc le code que j'ai:
$args = array(
'meta_key' => 'custom-usermeta',
'meta_value' => $cat_id
);
$users = get_users( $args );
et voici comment je le sauve:
update_user_meta( $user_id,'custom-usermeta',$cat_id);
$cat_id
est un tableau.
Mais ça ne marche pas. Ce que j’ai compris jusqu’à présent, c’est que le meta_value
attend une valeur non sérialisée. Comment puis-je obtenir que cela fonctionne? J’ai essayé le 'meta_compare' => 'LIKE'
, mais à peu près tout (en raison de la façon dont Wordpress sérialise les valeurs). Y a-t-il autre chose que je puisse faire pour résoudre ce problème?
Dans votre code d'origine, vous ne transmettez pas d'opérateur à meta_compare
. Notez que get_users()
doesnotdéfinit un opérateur par défaut. Essayez d'utiliser '='
:
$args = array(
'meta_key' => 'custom-usermeta',
'meta_value' => $cat_id,
'meta_compare' => '='
);
$users = get_users( $args );
En guise de diagnostic, vous pouvez vous assurer que le problème ne provient pas de la sauvegarde/interrogation effectuée par vos métadonnées utilisateur personnalisées. Remplacez les clés meta_key et meta_value par l'une des clés méta utilisateur WP par défaut, uniquement pour voir si quelque chose est retourné. (Le plus facile pourrait être le rôle d'utilisateur?)
Et celui-ci est un long plan, mais: même si la get_users()
La documentation du Codex dit le contraire, d'après ce que je peux obtenir de la source, le meta_query
pour WP_user_query
devraitêtre identique à meta_query
pour WP_query
- dans ce cas, avez-vous essayé de placer votre méta requête dans unarray? par exemple.:
$args = array(
array(
'meta_key' => 'custom-usermeta',
'meta_value' => $cat_id
)
);
$users = get_users( $args );
Vous pouvez essayer d'utiliser un "direct" WP_User_Query
.
$user_search = new WP_User_Query( array(
'orderby' => 'display_name',
'fields' => 'all_with_meta',
'meta_key' => 'CAT OR WHATEVER KEY NAME',
'meta_value' => $cat_id,
'meta_compare' => '='
) );
$users = $user_search->get_results();
Pas testé, mais ça devrait marcher.
Update
Autant que je sache, le $meta_value
dans update_metadata()
(la fonction qui est enveloppée par update_user_meta()
) prend une valeur unique. La seule façon de se sérialiser est maybe_serialize();
, qui ne sérialise que sur demande. Le problème doit donc être de votre côté et de la méta valeur $cat_ID
.
Vous pouvez revérifier la fermeture avant la maybe_serialize()
avec le filtre suivant:
apply_filters( "update_{$meta_type}_metadata", null, $object_id, $meta_key, $meta_value, $prev_value )
{$meta_type}
serait user
dans ce cas. Il suffit de déposer votre $cat_ID
dans une fonction de test pour voir ce qui se passe.