皆さん、こんにちは。私は少し問題があります。フォローしているユーザーのアバターを出力する機能があります。これはうまく機能しますが、ユーザーが削除された場合、アバターは空白の画像ボックスとして表示されたままになります。リストから削除されたユーザーのアバターを取り除くための方法はありますか?
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); ?>
事前に助けてくれてありがとう
ユーザーAが削除されたとユーザーが言った場合、そのユーザーのすべての痕跡はクリーンアップされていません。
つまり、Aに続く各ユーザーにアクセスして、そのユーザーのmetaから削除する必要があります。これはあなたの関数が古くなった古い情報を与えられ、もはや存在しないユーザーを参照しているために空白のユーザーを表示している理由です。
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
}
私はあなたがユーザーの後にユーザーのリストを持っているかどうか知りません、そうでなければ、あなたはこれをやりたくなるかもしれません。削除されたユーザー
注:変数の名前として言語キーワードを使用することは避けたいので、$function
$foreach
$return
または$class
は使用しないでください。
今、あなたは2組の複製データを持っています。 Aの後にBが続き、Bの後にAが続くというデータがあります。
そのため、ユーザーメタを使用する代わりに、ユーザー分類法を使用したはずです。私のユーザー分類法は「フォロー」と呼ばれ、分類法の各用語はユーザーを表します。
「admin」というユーザーがいて、フォロワーA、B、C、D、Eの5人のフォロワーがあるとします。各ユーザーには、分類法で「admin」という用語が割り当てられます。
そうすれば、誰が私をフォローしているのか、誰がフォローしているのかを簡単に把握することができます。自分がフォローしている人をつかむには、投稿IDではなく自分のユーザーIDを渡す wp_get_object_terms
を実行するだけです。自分をフォローしている人を確認するために、自分と同じ名前を持つ用語に割り当てられているすべてのオブジェクトを取得します。
ユーザー分類法を作成するにはどうすればよいですか?
Justin Tadlockによるこの記事を参照してください。管理UIから分類法の登録、フロントエンドのテンプレートまでを網羅しています
いくつかの最後の注意、あなたはそのユーザーの関連用語を作成/削除するためにユーザーの作成と削除に引っ掛かる必要があるでしょう。表示名はあなたが追加の作業をしなければならないことを意味するのに対して私はログイン名をスラッグという用語として使うことを勧めます。
このようにすることの利点:
欠点は、それがより多くの知識を前提としており、APIに不慣れな人にとってはより多くの初期の努力を必要とすることです
あなたがあなたのテーマ関数を書き直す間、速くて汚い一時的な修正。 foreach($followers as $follow)
に対してget_user_byクエリを実行します。そうすれば、削除されたものではなく、既存のユーザーだけが印刷されます。
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>";
}
}