【问题标题】:using two domain same database with different wordpress theme使用具有不同 wordpress 主题的两个域相同的数据库
【发布时间】:2013-01-17 14:21:05
【问题描述】:

我想在我的子目录中使用相同的数据库(内容/用户/cmets/meta/类别等)安装另一个 wordpress。

我实际上想创建我的网站的移动版本。但我不想使用任何移动检测脚本或 css3 媒体查询。只想创建我的新主题(移动版)

例如;

主域也有子域;

maindomain.com // root
mobile.maindomain.com // sub directory

这怎么可能?

【问题讨论】:

  • 如果您想为移动网站设置不同的域和不同的目录,但又想从同一个数据库中提取内容,那么基本原理和 url 解析将在一个 wordpress 内中断,例如移动网站的发布 url 可能需要您的用户到主域发布 url,因为这将从两者之间共享的数据库设置表中获取。大多数人通过拥有一个移动主题来实现这一点,您甚至可以在具有不同标题和内容的移动设备上切换到该主题。

标签: wordpress mobile


【解决方案1】:

WordPress 的一大优点是代码中的大量钩子允许您扩展或覆盖核心功能。

解决此问题的一种方法是在您的 vhost 文件中为每个站点设置一个 Apache 环境变量,以便在 WordPress 引导过程中使用该变量来覆盖主题和基本 URL 设置。

例如在 Apache vhost 中添加:

SetEnv WP_CONTEXT main

SetEnv WP_CONTEXT mobile

(如果您使用不同的网络服务器,则或等效)。

在 wp-config.php 中:

switch ($_SERVER['WP_CONTEXT']) {
    case 'main':
        define('WP_HOME','http://maindomain.com');
        define('WP_SITEURL','http://maindomain.com');
    break;

    case 'mobile':
        define('WP_HOME','http://mobile.maindomain.com');
       define('WP_SITEURL','http://mobile.maindomain.com');
    break;
}

这将根据环境变量设置基本 URL。

然后在插件中添加以下过滤器:

add_filter('template', 'change_theme');
add_filter('option_template', 'change_theme');
add_filter('option_stylesheet', 'change_theme');

function change_theme() 
{
    switch ($_SERVER['WP_CONTEXT']) {
        case 'main':
            return 'main';
        break;

        case 'mobile':
           return 'mobile';
        break;
}

这需要在插件中,以便在正常的主题加载过程之前加载(functions.php 是主题的一部分,因此为时已晚)。这些过滤器将拦截并覆盖数据库中的主题设置。

【讨论】:

  • 我应该管理我的 apache 还是服务器?我不能在共享主机上使用这个钩子吗?
  • 您可以在 .htaccess 文件中使用 SetEnvIf Request_URI "reg_ex" WP_CONTEXT=main,其中 'reg_ex' 是匹配域的正则表达式。
  • 或将SetEnvIf HOST "^maindomain.com" WP_CONTEXT=main 添加到您的.htaccess
  • 我会试试这个如果它能让我很高兴 Roscius
【解决方案2】:

您不能直接这样做,因为 WP 将其 url 存储在数据库中。 AFAIK 有一种方法可以在 sql 中“链接”表,所以它可能就是这样 - 例如链接 wp_options 旁边的所有内容,但它仍然是一种棘手的方式。

【讨论】:

  • 我觉得有些东西与 wp-db.php 相关?
  • 然后你应该破解每个 wpdb 查询并重写 url...但是比这更复杂的问题来了。可能您只想更改与元素 url 对应的请求,而不是图像源。这就是一些事情,这可能是不可能的。
  • 我在 SE 上找到了一些东西,但我没有尝试过,可以工作吧? wordpress.stackexchange.com/questions/10478/…
  • define('WP_HOME',"http://{XXX}"); define('WP_SITEURL',"XXX"); 在 wp-config.php 中是一个解决方案,但可能无法正常工作。
  • 你可以试试,但我用那个解决方案失败过一次。
【解决方案3】:

我有同样的问题,它至少对我有用:

  1. 将此代码添加到移动主题中的functions.php:

    remove_filter('template_redirect','redirect_canonical');

Here

了解有关此钩子的更多信息
  1. 在 wp-config.php 中添加这些:

    define('WP_HOME','http://mobile.maindomain.com'); 定义('WP_SITEURL','http://mobile.maindomain.com');

Here

了解更多这些钩子

在移动版的 wordpress 安装中应用这些更改

【讨论】:

    猜你喜欢
    • 2018-12-18
    • 2018-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多