4

昨天我在自托管网站上的 Wordpress 上安装了一个新主题。我知道允许您预览主题并使用它来选择我要安装的新主题的功能。

问题 我不想中断我网站的正常运行,但是这个新主题需要大量定制才能准备就绪。我该怎么做呢?

我糟糕的解决方案 是在我的桌面上运行虚拟服务器的唯一方法吗?这似乎很乏味,更不用说我在切换到“真实”服务器时通常会遇到的所有错误。

更好的方法? 我一直在搜索 SO 以及WordPress论坛以获取有关如何执行此操作的答案,但没有找到答案。我会认为这是一个常见的问题。也许我使用了错误的搜索词[themes, customization, before installing]???

任何帮助是极大的赞赏!谢谢!

4

3 回答 3

4

好的,因为您的问题是一个非常好的问题,并且可能不少人在决定更新他们的网站时会经历相同的过程,所以我决定尝试使用get_stylesheetandget_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 pagePosts page选项,而这不会影响实时站点,也无法更改两个主题使用的任何共享组件(站点名称、首页、帖子页面、每页帖子,等选项,内容等)。

因此,如果您不知道此解决方案是否适合您 - 好吧,这取决于。

如果两个主题都不是相对复杂,那么您很可能应该能够使用此 hack。如果他们是,也许您应该按照其他人的建议对您的网站进行第二次安装 - 我认为在子域或子目录中进行第二次安装将是您的最佳选择(仅仅是因为移动多站点数据库是比移动普通的 WP 数据库更复杂)。

于 2012-12-12T09:52:16.233 回答
2

我会设置安装了 wordpress 的本地 apache 服务器来自定义和测试新主题。完成自定义后,您可以将主题上传到您的实时站点并激活它。如果您需要在仪表板中设置一些设置,那么您可能需要再次调整它们。这是在上线之前测试/自定义主题的一种方法。

于 2012-12-12T08:46:00.347 回答
1

您可以创建一个网络(使用 WordPress 创建多站点define('WP_ALLOW_MULTISITE', true);,请参阅:http ://codex.wordpress.org/Create_A_Network ),然后创建一个子站点,然后使用维护插件将其“关闭”,这样用户就无法访问未以管理员身份登录,从主博客导出您的帖子和数据,使用 WordPress 默认导入器将它们导入子博客,然后将您的新主题应用到该子博客并进行处理。当一切都让您满意时,将主题应用到主站点并停用子站点。

于 2012-12-12T09:19:18.503 回答