Bonjour tout le monde, j'ai un petit problème. J'ai une fonction qui affiche les avatars des utilisateurs qui me suivent. Cela fonctionne très bien, mais si l'utilisateur est supprimé, les avatars restent visibles sous forme de zone d'image vide avec un lien hypertexte rompu manquant le nom d'utilisateur de l'utilisateur. Existe-t-il un moyen de supprimer l’avatar des utilisateurs supprimés de la liste?
function get_status_following($userid, $count = 0){
$followers = get_the_author_meta('following', $userid);
/** if no followers at the moment */
if( !is_array($followers)){
$return = "";
} else {
$return = '<ul class="widget_follow">' . "\n";
foreach( $followers as $folow){
$return .= "<li>";
$return .= '<a href="' . get_author_posts_url($folow) . '" title="' . get_the_author_meta('display_name', $folow) . '">';
if( get_the_author_meta( 'user_custom_avatar', $folow ) != "" ) {
$return .= '<img src="' . get_the_author_meta( 'user_custom_avatar', $folow ) . '" alt="" />';
} else {
$return .= get_avatar( get_the_author_meta( 'user_email', $folow ), '40' );
}
$return .= '</a>';
$return .= "<li>";
}
$return .= '</ul>' . "\n";
}
echo $return;
}
<?php printf( __(' %1$s', 'bo'), count_following($curauth->ID) ); ?>
<?php get_status_following($curauth->ID); ?>
Merci pour l'aide à l'avance
Lorsqu'un utilisateur dit que l'utilisateur A est supprimé, vous ne nettoyez pas toutes les traces de cet utilisateur.
Vous devez notamment aller dans chaque utilisateur suivant A et le supprimer de sa méta utilisateur. C’est la raison pour laquelle votre fonction affiche les utilisateurs vierges, car des informations obsolètes, périmées, font référence à des utilisateurs qui n’existent plus.
Vous voudrez faire ceci sur le hook deleted_user
// when a user is deleted, the deleted_user action is fired
// attach our example_cleanup function to this action/hook
add_action('deleted_user','example_cleanup');
// When the deleted_user action/hook/event is fired, this function will be called
function example_cleanup($user_id){
// remove this user from the users following this user
}
Je ne sais pas si vous avez une liste d'utilisateurs qui suivent un utilisateur. Sinon, vous voudrez peut-être le faire, sinon cette opération sera coûteuse, car vous devrez parcourir chaque utilisateur et supprimer la méta si elle est présente pour ne plus suivre. l'utilisateur supprimé
remarque: j'éviterais d'utiliser des mots-clés de langue comme noms de variables, donc pas de $function
$foreach
$return
ou $class
À l'heure actuelle, vous avez 2 jeux de données dupliquées. Vous avez un morceau de méta disant que A suit B, et quelques données disant que B est suivi de A.
Donc, au lieu d'utiliser les méta utilisateur, j'aurais utilisé une taxonomie utilisateur. Ma taxonomie d'utilisateur s'appellerait "suivant", et chaque terme de la taxonomie représenterait un utilisateur.
Supposons que j'ai l'utilisateur "admin" et que j'ai 5 abonnés, les utilisateurs A, B, C, D et E. Chaque utilisateur se verra attribuer le terme "admin" dans ma taxonomie.
J'aurais alors un moyen très facile de saisir qui me suit et qui suit une personne. Pour saisir qui je suis, je ne fais que wp_get_object_terms
en transmettant mon identifiant d'utilisateur plutôt qu'un identifiant de publication. Pour voir qui me suit, je saisis tous les objets affectés au terme qui porte le même nom que moi.
Comment créer une taxonomie d'utilisateurs?
Quelques notes finales, vous devrez vous attacher à la création et à la suppression d’utilisateur pour créer/supprimer les termes associés à cet utilisateur. Je vous recommande d'utiliser le nom de connexion comme terme slug car il ne change pas, alors que le nom d'affichage signifie que vous devez effectuer un travail supplémentaire.
Les avantages de le faire de cette façon:
L'inconvénient est qu'il suppose plus de connaissances et nécessite plus d'effort initial pour ceux qui ne sont pas familiers avec les API
Solution temporaire rapide et sale, pendant que vous écrivez votre fonction de thème. Effectuez une requête get_user_by sur foreach($followers as $follow)
. De cette façon, vous n'imprimerez que les utilisateurs existants et non les utilisateurs supprimés.
foreach( $followers as $folow){
$existing_user = get_user_by('id', $folow);
if($existing_user){ // you got a user
$return .= "<li>";
$return .= '<a href="' . get_author_posts_url($folow) . '" title="' . get_the_author_meta('display_name', $folow) . '">';
if( get_the_author_meta( 'user_custom_avatar', $folow ) != "" ) {
$return .= '<img src="' . get_the_author_meta( 'user_custom_avatar', $folow ) . '" alt="" />';
} else {
$return .= get_avatar( get_the_author_meta( 'user_email', $folow ), '40' );
}
$return .= '</a>';
$return .= "<li>";
}
}