我建议您不要使用用户元。尽管您的问题是由以下原因引起的:
update_post_meta( $author_id, "_user_followed", $followed_USERS ); // Add user ID to author meta
update_post_meta( $author_id, "_author_follow_count", ++$author_follow_count );
请注意,您调用了update_
post_元数据未更新_
user_meta,所以在某个地方,有一篇帖子的ID与作者的用户ID相同,这篇帖子添加了奇怪的meta。
然而,这仍然是一种效率低下的方法,并且容易出现可能给出不准确计数的竞争条件。当你试图找出谁追随作者的时候,你也会有一段非常昂贵的代码,因为你必须检查每个用户,看看他们是否追随作者。
Instead, 使用自定义分类法。
使用自定义用户分类法不仅仅适用于帖子。在这个分类法中,术语是作者,被标记的对象是用户(特别是我们使用用户ID作为标记)。
假设我们称之为分类法wpse_180398_followers
, 跟随作者:
// follow the user, note the last argument is true
$term_ids = wp_set_object_terms( $user_id, $author_id, \'wpse_180398_followers\', true );
if ( is_wp_error( $term_ids ) ) {
// There was an error somewhere and the terms couldn\'t be set.
} else {
// Success!
}
To unfollow someone:
wp_remove_object_terms( $user_id, $author_id, \'wpse_180398_followers\' );
至
check if a user is following an author:
if ( has_term( $author_id, \'wpse_180398_followers\', $user_id ) ) {
// user_id is following author_id!
}
至
get the followers of an author:
$followers = get_objects_in_term( $author_id, \'wpse_180398_followers\' );
至
get an authors follower count:
count( $followers );
至
get the authors a user follows:
$author_terms = wp_get_object_terms( $user_id, \'wpse_180398_followers\' );
foreach ( $author_terms as $term ) {
echo $term->slug; // the slug is the author ID
}
其他优势:
这些是用于类别和标记的相同API,它们将比使用用户元快得多。术语计数没有竞争条件。有时,术语计数会被缓存。您将有一个分类法,这意味着每个术语的存档模板和免费的URL结构您希望分类法不分等级,您可能希望将我给它的名称上的前缀更改为更独特的名称(不要只称它为followers),如果您希望在管理界面中有一个用户界面you\'ll want to read this
另一个注意事项是,您可能希望在删除与用户关联的术语时将其删除。到delete the term or remove all of a users followers:
wp_delete_term( $author_id, \'wpse_180398_followers\' );
至
reset who a user follows to nobody:
wp_delete_object_term_relationships( $user_id, \'wpse_180398_followers\' );
按钮本身的提示由于您已经有了一个AJAX端点,您可以删除其中的大部分代码,并用上面的代码片段替换它。对于按钮,您需要一个元素:
<a class="follow-button">Follow</a>
这也是一个切换,因此需要一些东西来指示您是否已经在跟踪:
<a class="follow-button following">Follow</a>
当然,如果它有
following
类,更改当您看到twitter关注按钮时的外观。如果你真的在跟踪某人,那么你只需要以下类:
<?php
$following = \'\';
if ( has_term.. etc as above ) {
$following = \' following\';
}
?>
<a class="follow-button<?php echo $following; ?>">Follow</a>
当然,它需要作者的ID,让我们使用一个数据属性:
<?php
$following = \'\';
if ( has_term.. etc as above ) {
$following = \' following\';
}
?>
<a class="follow-button<?php echo $following; ?>" data-author="<?php echo $author_id; ?>">Follow</a>
我相信您知道如何根据您的问题获取作者ID。
最后,您需要一些javascript,以便当用户单击follow按钮时(jQuery( \'a.follow-button\').click
, 信息技术:
检查元素是否具有following
类
如果它这样做,它将激发一个AJAX来展开作者如果它不这样做,它将激发一个AJAX来跟随作者它将传递元素(.data( \'author\' )
在jQuery中)它切换following
在元素上初始化,以便用户获得一些反馈(.toggle(\'following\')
)添加follow-in-progress
类,该类在css中添加一个微调器,并在拾取javascript时使其退出,这样就不会重复请求