简单管理员是否可以在多站点中保存选项?

时间:2014-08-27 作者:Andrea Barghigiani

我正在多站点安装上开发一个自定义插件,不幸的是,我不太习惯使用它。

这就是问题所在:我需要在用户的che profile页面中添加一个字段,并且我需要将要插入的值存储为user meta和option(在wp\\u options表中)。

如果我是超级管理员,一切正常,该选项将被存储,我可以稍后在主题中使用它们,但当我尝试使用update_option() 函数我无法执行此操作,并且无法存储值。

在这里你可以找到我的实验代码,但请注意,即使我对函数没有问题update_usermeta() 我无法将我的信息存储在wp\\U选项表中。。。

function ohw_update_field( $user_id ){
    $field = \'side_banner_\' . $user_id;
    $side_ad = $_POST[ $name ];
    update_usermeta( $user_id, $name, $side_ad );
    update_option( $name, $side_ad );
}

add_action( \'personal_options_update\', \'ohw_update_field\' );
add_action( \'edit_user_profile_update\', \'ohw_update_field\' );
正如你所看到的,我正在尝试使用$user_id 为了在表中创建唯一字段,我可能会开始使用数组来序列化唯一字段中的信息,但我想了解为什么网络站点的管理员无法保存选项。。。

我的意思是,正如我在抄本上读到的,用户应该manage_options 访问此数据库的能力,那么为什么只有超级管理员才能做到这一点呢?

提前感谢您提供的所有答案,祝您度过愉快的一天!

1 个回复
SO网友:Tom J Nowell

update_option( $name, $side_ad );
这里的问题是update\\u选项将值存储在站点的选项表中。但是,您位于多站点上,并且您的安装包含多个站点/博客,每个站点/博客都有自己的选项表。

因此,在博客/站点a上编辑用户不会更改博客/站点B上的选项,就像在你的房子里画墙绿色不会使我的房子里的墙变绿一样。如果不是这样,那么更新一个站点的标题将更新所有站点的标题。

因此:

我想存储特定于用户的数据,将其存储在用户元中

我想存储特定于博客的数据,将其存储在选项中。用户编辑屏幕不适合此选项,请将其置于设置菜单下的设置屏幕上。

我想存储影响整个安装的数据,而不考虑博客/用户/站点的使用update_site_option 首先检查是否是多站点使用is_multisite(). 不要以这种方式存储大量数据。同样,这些类型的选项不属于编辑/更新用户页面。也不要将“选项”页面放在正常仪表板设置下,将其放在“网络管理”面板中

结束

相关推荐

3.9 breaks multisite

我刚刚更新到3.9,我的所有网站现在都是网络上的主要(第一个)网站。如果我转到子网站管理页面,url会显示我在我的子网站上,但实际上我是网络主站点的管理员。管理栏也会显示当前站点是主网络站点,但url显示我应该在子网站上。我创建了一个新的多站点测试环境,同样的事情也发生了。如果我创建一个新的子网站,它将始终引导我到主站点,但URL将显示子网站地址。(前端和后端/管理)。似乎发生了一个重大的重定向问题。