好的,因为您的问题是一个非常好的问题,并且可能不少人在决定更新他们的网站时会经历相同的过程,所以我决定尝试使用get_stylesheet
andget_template
过滤器钩子。事实证明,使用一个非常小的插件,您可以根据特定规则轻松实施特定主题(在这种情况下,任何登录的访问者,但您可以更改它以使用您想要的任何逻辑)。
这是您需要放入插件目录中的文件的代码:
<?php
/*
Plugin Name: Switch Theme
Description: Switches the theme for logged-in visitors, while keeping the current theme for everyone else. !!!NOTE!!! Please back-up your database prior using this plugin - I can't guarantee that it will work with any theme, nor that it won't break your site's set-up - USE AT YOUR OWN RISK(I did a quick test and it seemed to be fine, but haven't done extensive testing).
You don't need to switch to the desired theme before that - you want to keep active the theme that you will display to your visitors - the one that you will see will be used programatically.
Before activating the plugin, change the line that says `private $admin_theme = '';` to `private $admin_theme = 'theme-directory-name';` where "theme-directory-name" is obviously the name of the directory in which the desired theme resides in.
*/
class MyThemeSwitcher {
private $admin_theme = '';
function MyThemeSwitcher() {
add_filter( 'stylesheet', array( &$this, 'get_stylesheet' ) );
add_filter( 'template', array( &$this, 'get_template' ) );
}
function get_stylesheet($stylesheet = '') {
if ( is_user_logged_in() && $this->admin_theme ) {
return $this->admin_theme;
}
return $stylesheet;
}
function get_template( $template ) {
if ( is_user_logged_in() && $this->admin_theme ) {
return $this->admin_theme;
}
return $template;
}
}
$theme_switcher = new MyThemeSwitcher();
所以 - 首先备份您的数据库!我在本地进行了测试,默认主题为 21,自定义主题为基本框架主题 - 主题选项和导航菜单已正确保存。
然后,您需要做的就是更新文件(将表示要使用的主题所在目录的名称更改为 where 的private $admin_theme = '';
行private $admin_theme = 'theme-slug';
)theme-slug
。
此外 - 您将无法更改Front page
和Posts page
选项,而这不会影响实时站点,也无法更改两个主题使用的任何共享组件(站点名称、首页、帖子页面、每页帖子,等选项,内容等)。
因此,如果您不知道此解决方案是否适合您 - 好吧,这取决于。
如果两个主题都不是相对复杂,那么您很可能应该能够使用此 hack。如果他们是,也许您应该按照其他人的建议对您的网站进行第二次安装 - 我认为在子域或子目录中进行第二次安装将是您的最佳选择(仅仅是因为移动多站点数据库是比移动普通的 WP 数据库更复杂)。