当用户说用户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的人来说,它需要更多的知识,需要更多的初步努力