web-dev-qa-db-fra.com

get_users attend une meta_value non sérialisée

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?

5
john

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_querydevraitê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 );

Cf. WP_Query USAGE DE meta_query .

2
Chip Bennett

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.

1
kaiser