从列表中删除已删除的用户头像

时间:2012-11-16 作者:jimilesku

大家好,我有点问题。我有一个功能,可以输出跟踪我的用户的化身。它工作得很好,但如果用户被删除,化身将保持为一个空白的图像框,其中一个断开的超链接丢失了用户用户名。有没有办法从列表中删除已删除的用户头像?

功能

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( __(\'&nbsp;%1$s\', \'bo\'), count_following($curauth->ID) ); ?>
<?php get_status_following($curauth->ID); ?>
提前感谢您的帮助

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

当用户说用户a被删除时,您并没有清除该用户的所有跟踪。

也就是说,您需要进入A之后的每个用户,并将其从其用户元中删除。这就是函数显示空白用户的原因,因为它被赋予过时的陈旧信息,并且引用的是不再存在的用户

你会想在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
}
我不知道你是否有一个用户列表,如果没有,你可能想这样做,否则这个操作会很昂贵,因为你需要迭代每个用户并删除meta(如果有),以释放被删除的用户

注意:我会避免使用语言关键字作为变量的名称,所以$function $foreach $return$class

我该如何实现这一点现在您有2组重复数据。你有一段元数据说a跟在B后面,有些数据说B跟在a后面。

因此,我将使用用户分类法,而不是使用用户元。我的用户分类法称为“following”,分类法中的每个术语都代表一个用户。

假设我有一个用户“admin”,我有5个追随者,用户A、B、C、D和E,在我的分类法中,每个用户都会被分配一个术语“admin”。

然后我会有一个非常简单的方法来抓取谁在跟踪我,以及谁在跟踪一个人。为了抓住我在跟踪的人wp_get_object_terms 传入我的用户ID而不是帖子ID。要查看谁在跟踪我,我会抓取分配给与我同名的术语的所有对象。

How do I create a user taxonomy?

See this article by Justin Tadlock, it covers everything from admin UIs to registering the taxonomy, to a frontend template

最后,您需要连接到用户创建和删除,以创建/删除该用户的相关术语。我建议使用登录名作为术语slug,因为它不会改变,而显示名则意味着您必须做额外的工作。

这样做的好处:

清理就像删除一个术语一样简单,无需遍历用户和用户元来存储后续/关注者,而不是2个。随着分类查询的速度越来越快,数据库中的逻辑关系也越来越合理,因此您可以使用WordPress核心API来访问所需的所有数据,而不是编写自己的包装函数,你可以将这部分外包给有经验的开发人员,让他们自己开发WordPress,这样可以节省时间,更容易列出关注者最多的人的名单或排名,同样,我们可以对哪些类别的帖子最多进行排名。通过一些工作,您可以改进标签云之类的东西,为关注者提供最直观的帖子。您可以直接获得大部分管理界面。缺点是,对于那些不熟悉API的人来说,它需要更多的知识,需要更多的初步努力

SO网友:ifdion

在您重新编写主题函数时,快速而肮脏的临时修复。在上执行get\\u user\\u by查询foreach($followers as $follow). 这样,您将只打印现有用户,而不是已删除的用户。

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

    }


}

结束