Hallo allerseits, ich habe ein kleines Problem. Ich habe eine Funktion, die die Avatare der Benutzer ausgibt, die mir folgen. Es funktioniert prima, aber wenn der Benutzer gelöscht wird, bleiben die Avatare als leeres Bildfeld sichtbar, und ein fehlerhafter Hyperlink fehlt dem Benutzernamen des Benutzers. Gibt es eine Möglichkeit, den gelöschten Benutzer-Avatar aus der Liste zu entfernen?
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); ?>
Vielen Dank für die Hilfe im Voraus
Wenn ein Benutzer sagt, dass Benutzer A gelöscht wurde, bereinigen Sie nicht alle Spuren dieses Benutzers.
Sie müssen nämlich in jeden Benutzer gehen, der A folgt, und ihn aus dessen Benutzer-Meta entfernen. Aus diesem Grund zeigt Ihre Funktion leere Benutzer an, da veraltete Informationen nicht mehr aktuell sind und sich auf Benutzer beziehen, die nicht mehr vorhanden sind
Sie möchten dies mit dem Hook deleted_user
tun
// 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
}
Ich weiß nicht, ob Sie eine Liste von Benutzern haben, die einem Benutzer folgen. Andernfalls ist dieser Vorgang möglicherweise kostenintensiv, da Sie jeden einzelnen Benutzer durchlaufen und das Meta entfernen müssen, wenn es nicht weiter verfolgt wird der gelöschte Benutzer
hinweis: Ich würde es vermeiden, Sprachschlüsselwörter als Namen für Variablen zu verwenden, daher gibt es keine $function
$foreach
$return
oder $class
Im Moment haben Sie 2 Sätze duplizierter Daten. Sie haben ein Stück Meta, das sagt, dass A auf B folgt, und einige Daten, die sagen, dass B auf A folgt.
Anstatt also Benutzermeta zu verwenden, hätte ich stattdessen eine Benutzertaxonomie verwendet. Meine Benutzertaxonomie würde "folgend" heißen und jeder Begriff in der Taxonomie würde einen Benutzer darstellen.
Angenommen, ich habe den Benutzer "admin" und ich habe 5 Follower, Benutzer A, B, C, D und E. Jedem Benutzer würde in meiner Taxonomie der Begriff "admin" zugewiesen.
Ich hätte dann eine sehr einfache Möglichkeit zu erfassen, wer mir folgt und wem eine Person folgt. Um herauszufinden, wem ich folge, gebe ich einfach wp_get_object_terms
meine Benutzer-ID und nicht eine Beitrags-ID ein. Um zu sehen, wer mir folgt, greife ich nach allen Objekten, die dem Begriff mit dem gleichen Namen wie ich zugewiesen sind.
Wie erstelle ich eine Benutzertaxonomie?
Um die zugehörigen Begriffe für diesen Benutzer zu erstellen oder zu löschen, müssen Sie sich in die Erstellung und Löschung von Benutzern einklinken. Ich würde empfehlen, den Anmeldenamen als Begriff zu verwenden, da er sich nicht ändert, wohingegen der Anzeigename bedeutet, dass Sie zusätzliche Arbeit leisten müssen.
Die Vorteile dieser Vorgehensweise:
Der Nachteil ist, dass es mehr Wissen voraussetzt und mehr anfängliche Anstrengungen für diejenigen erfordert, die mit den APIs nicht vertraut sind
Schnelle und schmutzige vorübergehende Korrektur, während Sie Ihre Designfunktion neu schreiben. Führen Sie eine get_user_by-Abfrage für foreach($followers as $follow)
durch. Auf diese Weise drucken Sie nur vorhandene Benutzer, nicht gelöschte.
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>";
}
}