Get_user_meta()仅为多站点中的当前博客返回用户Meta

时间:2011-11-10 作者:Pippin

我编写了一个插件,允许用户将自己喜欢的帖子添加到书签中,但在多站点网络上使用时遇到了一个小问题。

每次为帖子添加书签时,该帖子的ID都存储在当前用户元表中的ID数组中。这一切都很好,直到它被用于MS设置。

如果查看创建书签的网站,一切都很好,但是当查看其他网站时,我会得到一个属于其他网站的帖子ID列表。这是因为用户元表在站点之间共享。

所以,我需要做的是只检索当前站点的用户元。有没有办法做到这一点?我认为没有,所以如果有人有一些见解,那就太好了。

2 个回复
最合适的回答,由SO网友:Andrew Nacin 整理而成

WordPress通过使用每个站点的数据库前缀来区分站点之间的用户元密钥。

例如,不使用favorite\\u posts键,而是使用元键wp\\u 23\\u favorite\\u posts。要获取前缀,可以使用$wpdb->get_blog_prefix().

但是等等,实际上有一个完整的API专门用于此。而不是使用*_user_meta(), 使用*_user_option(). 这些都是针对单个站点进行内部翻译的。

而且,它很容易集成到您现有的插件中。get_user_option() 首先检查特定于站点的密钥,但如果找不到任何内容,则返回到用户范围的元密钥。所以继续,切换到get_user_option() 你现有的插件可以在单个站点上正常工作。

以下是函数定义:

./wp-includes/user.php:251:function get_user_option( $option, $user = 0 )
./wp-includes/user.php:293:function update_user_option( $user_id, $option_name, $new_value )
./wp-includes/user.php:322:function delete_user_option( $user_id, $option_name )

SO网友:Brad Vincent

为什么不将blog id与postid数组一起存储,以便在用户元数据中存储类似的内容:

Array
(
   [blogid1] => Array(1,2,4,7),
   [blogid2] => Array(3,6,8,10)
)
您可以使用全局$blog\\u id获取当前blogid。在非多站点设置中,blogid将为0,并且当您尝试通过

arr[$blog\\u id]

结束

相关推荐

Multisite questions

关于WP multisite,我有几个问题,希望广泛使用过它的人能够提供帮助:是否可以在多个不同的域上管理多个WP站点</如何管理插件,有些插件我想在所有网站上使用,但有些插件我只想在某些网站上使用。还有,每个插件设置会发生什么变化,它们是否会全面推出</更新-如何对每个站点的插件和WP本身进行管理