multisite shared settings

时间:2016-11-10 作者:Ilya Dudarev

我正在使用多站点安装按城市分隔内容。我考虑了其他选择,但多站点对我来说是最好的。

但由于将有许多网站,这些网站只会因内容和用户角色而有所不同,因此我需要在所有网站之间同步所有wordpress和插件设置。

我发现了一个配置黑客-您可以重写users表名,所以每个站点都将使用相同的users表。所以我想到了一些类似的方法来覆盖设置表名。但是wordpress有几个不应该相同的字段:siteurl、home、blogname、blogdescription。也许是别的什么。此外,并没有钩子来替换设置表名称,所以我需要编辑wordpress代码,这将是极端的措施。

此外,最好将所有设置存储在一个文件中,以便将其存储在版本控制中。

有什么解决方案吗?我知道使用多站点安装的人不多,但也许有人有什么想法?

1 个回复
最合适的回答,由SO网友:Pat J 整理而成

从注释更新要将选项数组转换为站点选项,可以尝试以下操作:

add_action( \'init\', \'wpse245699_use_site_options\' );
function wpse245699_use_site_options() {
    // Uses site options for these options.
    $required_site_options = array(
        \'some_option_name\',
        \'another_option_name\',
        \'and_another_one\',
    );
    foreach( $required_site_options as $option ) {
        add_action( \'update_option_\' . $option, \'wpse245699_update_site_option\', 10, 3 );
        add_filter( \'pre_option_\' . $option, \'wpse245699_get_site_option\', 10, 2 );
    }
}

function wpse245699_update_site_option( $old_value, $value, $option ) {
    update_site_option( $option, $value );
}

function wpse245699_get_site_option( $pre_option = false, $option ) {
    return get_site_option( $option );
}
此代码未经测试。

我不建议将WordPress的所有选项都转换为站点选项;每个站点都有许多核心选项,将它们全部设置为相同的值很可能会导致糟糕的结果。

WordPress Multisite已经为所有用户使用了一个表;你不应该需要任何形式的“配置黑客”来完成这一点。至于插件和设置:您可以通过网络激活插件,它们将在您的多站点网络中的每个站点上运行。和设置(或选项--我假设您引用的是Options API) 可以按站点存储和检索(使用*_option() 功能)或跨网络全局(使用*_site_option() 功能)。

WordPress几乎将其所有数据存储在数据库中,因此从文件中保存和加载选项/设置并不是WordPress真正的方式。

参考文献Multisite Network Administration
  • Options API