web-dev-qa-db-fra.com

Supprimer l'avatar des utilisateurs supprimés de la liste

Problème

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?

Une fonction

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;

}

Sortie de la fonction dans une page

<?php printf( __('&nbsp;%1$s', 'bo'), count_following($curauth->ID) ); ?>
<?php get_status_following($curauth->ID); ?>

Merci pour l'aide à l'avance

1
jimilesku

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

Comment j'aurais implémenté ceci

À 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?

Voir cet article de Justin Tadlock, il couvre tout, des interfaces utilisateur administratives à l'enregistrement de la taxonomie, en passant par un modèle frontal

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:

  • Nettoyer est aussi simple que supprimer un terme, sans itérer à travers les utilisateurs et les méta-utilisateurs
  • 1 morceau de données à stocker suivant/suiveurs pas 2
  • C'est une relation plus logique dans la base de données à suivre
  • Comme les requêtes de taxonomie deviennent plus rapides, faites donc la vôtre
  • Vous pouvez utiliser les API principales de WordPress pour accéder à toutes les données dont vous avez besoin, au lieu d'écrire vos propres fonctions d'encapsuleur. Vous pouvez externaliser cette partie aux développeurs expérimentés travaillant sur WordPress pour gagner du temps.
  • Il est beaucoup plus facile de faire des listes ou de classer les personnes qui ont le plus d'abonnés, de la même manière que nous pouvons classer les catégories qui ont le plus d'articles.
  • Avec certains travaux, vous pouvez modifier des éléments tels que les nuages ​​de tags pour que les adeptes puissent voir qui a le plus
  • Vous obtenez le plus d'une interface d'administration pour cela tout de suite

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

3
Tom J Nowell

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>";

    }


}
1
ifdion