GET_OPTION是否与WordPress网络(多站点)兼容?

时间:2014-10-26 作者:dzdesigner

我在wp安装的插件中有这个功能,但它在wordpress MU上不起作用。

 if( !get_option( $option-name ) ) {
        // something
            } else {
    // something else
    }
如何使get\\u选项与多站点安装兼容。

//我正在使用redux框架,我创建了一个选项,我想有一个条件来检查是否使用了该选项。。但它在wp安装上运行良好,但在MU one上运行不好。

谢谢

1 个回复
SO网友:josh

使用多站点时,有两组常用的函数用于提取/更新选项。

现在如何构造选项并将其保存到数据库取决于您。这取决于插件添加的功能,以及存储/拉取选项的位置。

Single Site Configuration

get_option()update_option() 用于与wp_options 桌子此表特定于每个博客id。您可能有wp_options_2 和awp_options_3 桌子哪里23 对应于该博客id。

如果您使用get_option() 在代码中。。。它将在相应的blog id中查找该选项wp_options 桌子这意味着每个子站点在这里可能有不同的值。

Multi Site Configuration

另一组功能是get_site_option()update_site_option(). 这两个函数用于与site_meta 桌子这个site_meta 表只存在一次。。并用于所有子网站的全局选项。

如果您使用get_site_option() 在代码中。。。它将从site_meta 桌子换句话说,每个子网站将使用来自site_meta 桌子

Custom Code to Check if Multisite is Active

当我编写一个需要与多站点兼容的插件时,我会做什么。。正在添加一个自定义功能,以检查站点是否为网络安装。如果是。。。我从网站元拉。。。如果不是,我会从站点选项中选择。

// First, I define a constant to see if site is network activated
if ( ! function_exists( \'is_plugin_active_for_network\' ) ) {
    // Makes sure the plugin is defined before trying to use it
    require_once( ABSPATH . \'/wp-admin/includes/plugin.php\' );
}
if (is_plugin_active_for_network(\'my_plugin_folder/main.php\')) {  // path to plugin folder and main file
    define("THIS_PLUGIN_NETWORK_ACTIVATED", true);
}
else {
    define("THIS_PLUGIN_NETWORK_ACTIVATED", false);
}

// Wordpress function \'get_site_option\' and \'get_option\'
function get_this_plugin_option($option_name) {

    if(THIS_PLUGIN_NETWORK_ACTIVATED== true) {

        // Get network site option
        return get_site_option($option_name);
    }
    else {

        // Get blog option
        return get_option($option_name);
    }
}

// Wordpress function \'update_site_option\' and \'update_option\'
function update_this_plugin_option($option_name, $option_value) {

    if(THIS_PLUGIN_NETWORK_ACTIVATED== true) {

        // Update network site option
        return update_site_option($option_name, $option_value);
    }
    else {

    // Update blog option
    return update_option($option_name, $option_value);
    }
}
现在,我们可以简单地使用get_this_plugin_option()update_this_plugin_option(); 我们的代码将确定该站点是否处于网络激活状态。。并从相应的选项表中更新或获取选项。

这样可以避免编写两次代码。。或者在为网络激活编码时使用两个单独的挂钩。

结束

相关推荐

WordPress MultiSite中的共享上载文件夹

我有一个wordpress多站点,我希望通过主站点(mysite.com)上传的所有图片都可以访问sub1.mysite.com 和sub2.mysite.com. 所有图像应位于一个没有子目录的文件夹中(例如:wp-content/uploads/image.jpg).我尝试了下面的函数,但我的子域图像上载到wp-content/uploads/sites/#blog_id/function wpse_16722_upload_dir( $args ) { $newdir = \'/\'