如何在单个站点上为作者/目录使用不同的域/子域?

时间:2014-12-28 作者:adammoore

我不确定这个问题的措辞是否正确。。。

我和妻子有一个博客,叫做“家庭”。com在本例中,我们都参与了。

我想要一家人。com以显示所有博客帖子。

我。家庭com将只显示我的作者和她的帖子。家庭com将只显示她撰写的帖子。稍后,我们将添加kid1。家庭com等等。。。

此外,有时她/我/我们做的项目超出了一个职位项目1。com将仅显示“project1”类别中的所有帖子。然而,与作者不同的是,只有特定类别才会有自己的域名。

wp-subdomains-revisiteddomain-mapping-system 一起使用似乎最接近我想要的,但它们已经过时,我确信我自己无法复制它们。

编辑1:我发现这个奇妙的答案mikeschinkel: Multiple Domain Names - One WP Install (non-Multisite) - Default Each Domain name to Category Archive

编辑2:我的网站上有mikeschinkel的代码。太棒了现在,我一直在尝试将其修改为与子域一起使用。这并不顺利——只有在我的修改完成后才会加载一个白页。

编辑3:网站正在重新加载工作域和子域!多么令人兴奋啊!

下一个任务是让所有链接使用各自的域/子域。例如,由me编写的、在类别project1中的post holiday应显示为family。com/holiday,我。家庭com/假日或项目1。com/holiday取决于链接的子/域。任何建议都将不胜感激!!!

(此外,它还必须与WPML一起使用,翻译后应改为her.family.com/休日/。。。可怕!)

编辑4:只是澄清一下,从功能上来说,这与查看单个作者或类别存档没有什么不同,唯一的区别是存档将有自己的子/域。

此外,我的TLD是。是。。。我的域名是我的姓。这意味着我的URL已经是一句话了->\\u adam。兔子是/。。。

目标是有一个特定于任何关系的url:adam。兔子是/园艺的妻子。兔子是/编码兔。is/旅行

编辑5:更新的代码-现在大部分正在工作。我不愿意将其标记为已解决,因为我没有删除基本类别或为每个页面添加单独的标题/标题。。。但正如这段代码所起的作用,它解决了这篇文章的主要问题。我希望其他人觉得它有用:)

编辑6:我发现了一个很好的插件,名为wp no base permalink,它删除了类别库。我更新了代码以使用此插件。现在如果我输入adam。兔子is/uncategorized它显示了我所有未分类的帖子-这正是我要找的!

下面的答案。。。

4 个回复
最合适的回答,由SO网友:adammoore 整理而成

wp配置。php

if ( is_alt_domain( $_SERVER[\'SERVER_NAME\'] ) ) {
    $domain = str_replace( \'www.\', \'\', $_SERVER[\'SERVER_NAME\'] );
    define( \'WP_SITEURL\', \'http://www.\' . $domain );
    define( \'WP_HOME\', \'http://www.\' . $domain );
} else if (is_sub_domain( $_SERVER[\'HTTP_HOST\'] ) ) {
    $domain = "{$_SERVER[\'HTTP_HOST\']}";
    define( \'WP_SITEURL\', \'http://\' . $domain );
    define( \'WP_HOME\', \'http://\' . $domain );
} else if (! (is_main_domain( $_SERVER[\'SERVER_NAME\']) ) ) {
    Header( "HTTP/1.1 301 Moved Permanently" );
    Header( "Location:http://family.com", true, 301 );
    exit;
}
function is_main_domain( $domain ) {
    $domain = $_SERVER[\'HTTP_HOST\'] ;
    return strcmp( $domain, my_main_domain() ) == 0 ;
}
function is_sub_domain ( $domain ) {
    $domain = str_replace( my_main_domain(), \'\', $_SERVER[\'HTTP_HOST\'] );
    return in_array( substr( $domain, 0, -1), sub_domains() );
}
function is_alt_domain( $domain ) {
    $domain = str_replace( \'www.\', \'\', $_SERVER[\'SERVER_NAME\'] );
    $domain = substr( $domain, 0, strrpos( $domain, \'.\') );
    return array_key_exists( $domain, alt_domains() );
}
function sub_domains() {
    return array(
        \'me\',
        \'her\',
        \'kid1\',
    );
}
function alt_domains() {
    return array(
        \'project1\' => \'com\',
        \'project2\' => \'com\',
        \'project3\' => \'is\',
    );
}
function my_main_domain() {
    return \'family.com\';
}
功能。php

// this seems to be important
update_option(\'siteurl\',\'http://\' . $_SERVER["HTTP_HOST"]);
update_option(\'home\',\'http://\' . $_SERVER["HTTP_HOST"]);

add_action( \'category_link\', \'yoursite_category_link\', 11, 2 );
function yoursite_category_link( $category_link, $category_id ) {
    $parts = explode( \'/\', $category_link );
    // if %category% in http://%domain%/%category%/
    // is in alt_domains() update the category_link
    if ( array_key_exists("{$parts[3]}", alt_domains() ) ) {
        $tld = alt_domains()[$parts[3]];
        $category_link = "http://www.{$parts[3]}.{$tld}/"; // Strip \'category/%category%/\'
    }
    return $category_link;
}

add_action( \'author_link\', \'yoursite_author_link\', 11, 2 );
function yoursite_author_link( $author_link, $author_id ) {
    $parts = explode( \'/\', $author_link );
    // if %author% in http://domain/author/%author%/
    // is in sub_domains() update the author_link
    if ( "{$parts[3]}" == "author" && in_array("{$parts[4]}", sub_domains() ) ) {
        $author_link = "http://{$parts[4]}.family.com/"; // Strip \'author/%author%/\'
    } else {
        $author_link = "http://family.com/author/{$parts[4]}"; // Strip \'author/%author%/\'
    }
    return $author_link;
}

add_action( \'init\', \'yoursite_init\' );
function yoursite_init() {
    // Remove the canonical redirect to the category page
    // if %category% in http://%category%.%ext%/ is a blogger category
    if ( is_alt_domain( $_SERVER[\'SERVER_NAME\'] ) || is_sub_domain( $_SERVER[\'HTTP_HOST\'] ) ) {
        $parts = explode( \'/\', strtolower( $_SERVER[\'REQUEST_URI\'] ) );
        if ( (count($parts) > 1) &&  ( array_key_exists("{$parts[1]}",alt_domains() ) || ( "author" == $parts[1] && in_array("{$parts[2]}", sub_domains() ) ) ) ) {
            remove_filter( \'template_redirect\', \'redirect_canonical\' );
        }
    }
}

add_action( \'template_redirect\', \'yoursite_template_redirect\' );
function yoursite_template_redirect() {
    // Redirect any http://%domain%.%ext%/%category%/ to http://%category%.%ext%/
    // and any http://%domain%.%ext%/author/%author%/ to http://%author%.%domain%.%ext%
    $parts = explode( \'/\', strtolower( $_SERVER[\'REQUEST_URI\'] ) );
    if ( array_key_exists( "{$parts[1]}", alt_domains()) ) {
        $tld = alt_domains()[$parts[1]];
        wp_redirect( "http://www.{$parts[1]}.{$tld}/", 301 );
        exit;
    } else if ( \'author\' == $parts[1] && in_array("{$parts[2]}", sub_domains() ) ) {
        wp_redirect( "http://{$parts[2]}.famliy.com/", 301 );
        exit;
    }
}

add_action( \'request\', \'yoursite_request\' );
function yoursite_request($query_vars) {
    // If %category% in http://%category%.%ext%/ is a blogger category set the
    // \'category_name\' query var to tell WordPress to display the category page.
    if ( is_alt_domain( $_SERVER[\'SERVER_NAME\']) || is_sub_domain( $_SERVER[\'HTTP_HOST\'] ) ) {
        $category_domain = str_replace( \'www.\', \'\', $_SERVER[\'SERVER_NAME\'] );
        $category_domain = substr( $category_domain, 0, strrpos( $category_domain, \'.\' ) );
        $author_name = substr( $_SERVER[\'HTTP_HOST\'], 0, strpos( $_SERVER[\'HTTP_HOST\'], \'.\' ) );
        $parts = explode( \'/\', $_SERVER[\'REQUEST_URI\'] );
        $category_name = "{$parts[1]}";
        if ( array_key_exists($category_domain, alt_domains()) ) {
            if ( strlen( $category_name ) < 1  ) {
                $query_vars = array( \'pagename\' => $category_domain.\'-page\' );
            } else if ( term_exists("{$category_name}", \'category\') ) {
                $query_vars = array(
                    \'category__and\' => array(
                        get_category_by_slug($category_domain)->term_id,
                        get_category_by_slug($category_name)->term_id
                    )
                );
            }
        } else if ( in_array( $author_name, sub_domains() ) ) {
            if ( strlen( $category_name ) < 1  ) {
                $query_vars = array( \'pagename\' => $author_name.\'-page\' );
            } else if (term_exists("{$category_name}", \'category\') ) {
                $query_vars = array(
                    \'category_name\' => $category_name,
                    \'author_name\' => $author_name
                );
            }
        }
    }
    return $query_vars;
}
当然,您还需要将名称服务器上的子域(或*)指向wordpress安装。您还需要为正在使用的任何其他域添加虚拟主机(Nginx)。。。您需要设置CORS。

作为旁注,此答案与我的下一个答案/问题结合使用-How to have a static category/author page? - 应该让我对拥有一个多面网站的意图更加明确:)

SO网友:brianjohnhanna

是否有什么原因需要在“子目录”上使用子域(我把它放在引号中,因为它实际上不是真正的子目录…请继续阅读)?如果你想和家人一起去,这会容易得多。通信/我,家庭。通信/她,家庭。com/project1等。。。

沿着这条路线,你可以创建page templates 其中包含自定义循环,使用WP_Query 并将它们分配到WP Admin中的页面。如果您使用的是非常好的永久链接,那么您可以根据需要为页面命名,这样您就会有一个漂亮的链接。

老实说,我想不出有什么方法可以在子域中实现这一点,但这不是一个WP问题,而是一个域/服务器管理问题。

SO网友:Mark Kaplun

实现站点间内容分离的最佳方法是分离其数据库。根据经验法则,聚合内容更容易——单独的it、搜索、RSS提要、社交共享、SEO可能需要在不同的子域上表现不同,孩子们不可能同意“老家伙”强加的设计。

最简单的解决方案是在网络模式下使用wordpress,然后在任何需要编写或查找插件的地方自动将内容从“源博客”导入到正确的聚合站点。

SO网友:Steve82

诚然,这是一个聪明的解决方案,而且在您原来的问题范围内效果很好。对于将来有类似用例参考的读者,我建议他们也考虑创建一个多站点(网络)安装。

当纯粹用于子域站点(即无域映射)时,创建和管理并不比标准安装困难多少。然后,您就有了一个更大的范围来开发每个子站点,就像您将来喜欢的那样,并且有了更大的灵活性(完全不同的主题等)。更不用说更具逻辑性和易于管理的内容安排了。Multisite还具有更大的可扩展性—添加域映射,您可以在一个托管帐户和管理员登录上添加您的业务站点、其他朋友、体育团体等。

ThreeWP广播插件是一个很好的解决方案,可以在任何适合该主题的网站上发布帖子,并且可以通过一些背景阅读来展示多站点的范围。

我的感觉是,未来这篇文章(由于标题)的大部分流量将是多站点非常适合的人,但这是一个经常被忽视的人。

http://codex.wordpress.org/Create_A_Network

http://plugins.plainview.se/threewp-broadcast/

结束

相关推荐

List all blog categories

我已经创建了一个博客插件。我的博客中有博客类别。我想获得所有博客类别的列表,并将其列在我的www.domain中。com/blogs/page。我的博客类别名称为“blogcategory”。我不知道如何在list-category 作用我是wordpress开发的nooby。