Ceci est mon code:
$args = array (
'order' => 'DESC',
'include' => get_user_meta($author->ID, 'the_following_users', true)
);
$wp_user_query = new WP_User_Query( $args );
$users = $wp_user_query->get_results();
if ( ! empty( $users ) ) {
foreach ( $users as $user ) {
// Get users
}
} else {
echo 'Error.';
}
La méta utilisateur 'the_users' peut être vide. Si elle est vide, elle m'indique tous les utilisateurs enregistrés, sinon vide, elle imprime les utilisateurs dont j'ai besoin.
Le problème que if ( ! empty( $users ) ) { }
ne lit pas si 'include' est vide ou non, je sais que je peux créer une variable et vérifier d'abord si la variable est vide ou non mais je n'ai pas besoin de cela. Je veux vérifier si 'include' est vide en utilisant '$ wp_user_query-> get_results ()'.
MODIFIER:
Comme Nicolai répond, nous pouvons remplacer true à false à partir du code get_user_meta et le problème sera résolu. Si l'inclinaison est vide, WP-User_Query renvoie une erreur false et print.
Le problème maintenant que si include n'est pas vide, le code doit fonctionner sans aucun problème mais que cela ne se produit pas, il ignore les utilisateurs qui ont stocké dans la méta utilisateur 'the_users' et n'impriment que l'utilisateur actuel.
Voici la valeur de la méta utilisateur 'the_users':
a:19:{i:0;s:2:"89";i:3;s:3:"105";i:4;s:2:"74";i:5;s:3:"111";i:6;s:3:"167";i:7;s:2:"83";i:8;s:2:"54";i:9;s:2:"87";i:10;s:2:"85";i:11;s:2:"77";i:13;s:2:"82";i:14;s:2:"60";i:15;s:3:"149";i:16;s:3:"160";i:17;s:2:"71";i:18;s:1:"3";i:19;s:1:"2";i:20;s:3:"121";i:21;s:2:"57";}
Voici comment j'ai stocké les métadonnées de l'utilisateur 'the_users':
$the_following_users = get_user_meta($the_follower, "the_following_users", true);
if(!in_array($user_follow_to, $the_following_users) && is_array($the_following_users)){
$the_following_users[] = $user_follow_to;
} else {
$the_following_users = array($user_follow_to);
}
update_user_meta($the_follower, "the_following_users", $the_following_users);
Je pense que le problème ici est que, en train de violer cette règle, vous avez créé de la confusion et des problèmes:
faire 1 chose par déclaration, 1 déclaration par ligne
Couplé à un autre problème:
Passage de tableaux aux API qui sont stockées en tant que sérialisé PHP (problème de sécurité)
Et un autre:
Toujours vérifier vos hypothèses
il ignore les utilisateurs qui ont stocké dans la méta utilisateur 'the_users' et n'impriment que l'utilisateur actuel.
Ce dernier est le tueur ici. Vous ne vérifiez jamais les valeurs d'erreur sur get_user_meta
, ce qui entraîne des erreurs. Les utilisateurs ne commencent pas avec the_users
méta, il faut l'ajouter.
Parcourez ce code dans votre esprit, par exemple:
$the_following_users = ''; //get_user_meta($the_follower, "the_following_users", true);
if(!in_array($user_follow_to, $the_following_users) && is_array($the_following_users)){
$the_following_users[] = $user_follow_to;
Ici, il n'y a pas de contrôle sur $the_following_users
, qui peut ne pas être du tout un tableau, mais une false
ou une chaîne vide.
Alors corrigeons la sauvegarde:
$the_following_users = get_user_meta($the_follower, "the_following_users", true);
if ( empty( $the_following_users ) ) {
$the_following_user = array();
}
Puis simplifions la partie suivante:
$the_following_users[] = $user_follow_to;
Et corrigez les économies afin qu’elles ne représentent pas un risque pour la sécurité:
$following = implode( ',', $the_following_users );
update_user_meta($the_follower, "the_following_users", $following );
Enfin, passons au frontend:
Premièrement, nous supposons que le get_user_meta
fonctionne, mais nous ne vérifions jamais si cela est vrai:
$args = array (
'order' => 'DESC',
'include' => get_user_meta($author->ID, 'the_following_users', true)
);
Que se passe-t-il si l'utilisateur n'a jamais suivi quelqu'un auparavant? Et s'ils ne suivaient pas tout le monde? Cela casserait tout! Alors corrigeons cela et passons au format de liste séparé par des virgules:
$include = get_user_meta($author->ID, 'the_following_users', true);
if ( empty( $include ) ) {
// the user follows nobody, or has not followed anybody yet!
} else {
// turn the string into an array
$include = explode( ',', $include );
$args = array (
'order' => 'DESC',
'include' => $include
);
// etc...
}
Votre boucle ressemble à ceci:
foreach ( $users as $user ) {
// Get users
}
Mais vous ne partagez jamais le code dans la boucle, ce qui pourrait expliquer pourquoi vous rencontrez des problèmes. Par exemple, the_author
fait toujours référence à l'auteur du message en cours. Si vous souhaitez afficher des informations sur le $user
, vous devez transmettre son ID ou utiliser les propriétés publiques, par exemple.
foreach ( $users as $user ) {
// Get users
echo esc_html( $user->first_name . ' ' . $user->last_name );
}
Le paramètre include
de WP_User_Query
attend un tableau en tant qu'argument. Définissez donc le paramètre $single
de get_user_meta
sur false
. Ou ne l'utilisez pas, car false
est la valeur par défaut.
// USE
get_user_meta( $author->ID, 'the_users', false )
// OR
get_user_meta( $author->ID, 'the_users' )