如何让单个帖子拥有自己的域名

时间:2010-11-26 作者:NetConstructor.com

我不确定这里哪种解决方案最适合作为解决方案,但我正在寻找的只是一种简单的方法,通过页面编辑屏幕上的元框进入可选域,然后从wordpress使用的默认页面模板中选择一个模板。

我假设必须有一种简单的方法来实现这一点,即手动为新域添加一个a名称记录,并将其指向主网站正在使用的同一IP,然后通过一些代码允许对该新域的请求在使用您选择的特定页面模板的同时加载特定的帖子ID。

我希望该页面可以访问这两个域,只有新的域将利用定义的模板。

如何做到这一点?

我想另一种方法是先设置一个页面,这样它就可以通过使用一些用于多站点的内置wordpress代码拥有自己的子域?换句话说,如果可以将自定义子域分配给特定的post id,则可以为新域设置此子域的cname记录。。。不确定实现这一目标的最佳方式。

2 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

此代码允许您设置自定义元值,如果域名(或子域,如果您编辑代码)与之匹配,则查询将更改为与该帖子匹配。页面模板将仅用于该请求,而不用于通过“正常”URL的请求。

这不会改变该页面上的链接:他们应该去“普通”网站还是留在子域中?

如何在DNS端解决此问题可能是a Server Fault question.

define( \'WPSE4558_STANDARD_SERVER\', \'www.example.com\' );
define( \'WPSE4558_META_KEY\', \'domainname\' );

add_filter( \'request\', \'wpse4558_request\' );
function wpse4558_request( $query_vars )
{
    $query_vars[\'is_subdomain_request\'] = false;
    if ( WPSE4558_STANDARD_SERVER != $_SERVER[\'SERVER_NAME\'] ) {
        $query_vars[\'meta_key\'] = WPSE4558_META_KEY;
        // This can also be just the subdomain, if you edit it
        $query_vars[\'meta_value\'] = $_SERVER[\'SERVER_NAME\'];
        $query_vars[\'is_subdomain_request\'] = true;

    }
    return $query_vars;
}

add_action( \'parse_query\', \'wpse4558_parse_query\' );
function wpse4558_parse_query( &$wp_query )
{
    if ( $wp_query->get( \'is_subdomain_request\' ) ) {
        $wp_query->is_home = false;
        $wp_query->is_page = true;
        $wp_query->is_singular = true;
    }
}

add_filter( \'page_template\', \'wpse4558_page_template\' );
function wpse4558_page_template( $template )
{
    global $wp_query;
    $id = $wp_query->get_queried_object_id();
    if( ! $wp_query->get( \'is_subdomain_request\' ) && get_post_meta( $id, WPSE4558_META_KEY ) ) {
        // This is a page that has a subdomain attached, but the current request is not via that subdomain
        // So use the normal template hierarchy, ignore the page template
        $templates = array();
        $pagename = $wp_query->get_queried_object()->post_name;
        if ( $pagename ) {
            $templates[] = "page-$pagename.php";
        }
        if ( $id ) {
            $templates[] = "page-$id.php";
        }
        $templates[] = "page.php";
        $template = locate_template( $templates );
    }
    return $template;
}

SO网友:joelhaus

更新的答案

好的,听起来您希望在“编写”面板中有一个选项,允许您在站点a上撰写文章,还可以选择将该文章发布到站点B。这听起来是一个有趣的项目,应该可以使用WordPress and XMLRPC.

这里是some example code. 通过将本文中的代码与自定义元框相结合,您应该能够实现您的目标。祝你好运

以下是一些更好的资源:

注意:为了确保您对帖子所做的更新是联合的,您可能还需要将远程站点上帖子的post\\u ID存储在自定义字段中。您可能还应该在发送最初的远程帖子之前实现几分钟的延迟(我知道在发布几乎所有内容后,我不可避免地会立即进行更改,但这可能只是我自己)。

原始答案如下

任一(i)设置。htaccess with mod\\u rewrite可屏蔽帖子URL,(ii)使用RSS with wp\\u insert\\u post跨多个站点联合您的帖子,或(iii)在主题中创建一个名为“post redirect”的文件夹,并向其中添加以下文件:

  • post-redirect-meta.php - 创建一个名为“Post Redirect URL”的元框,其中包含一个文本输入框,该文本输入框将保存到Posteta表中。

  • post-redirect.php - 创建一个名为“Post Redirect”的主题模板,该模板有条件地(基于HTTP引用)使用保存在Post编辑页面“Post Redirect URL”元框中的目标URL执行301重定向。这将允许您在新域的框架中显示原始帖子。

    根据您所述的要求,这些似乎是最简单的解决方案,但还不清楚这是否是您的意图(例如,“我希望两个域都可以访问页面”是什么意思?两个站点都运行WP吗?这两个站点之间的业务关系如何?)。如果你能更清楚地解释你想要达到的最终结果,以及你最关心的问题的清单,这会有所帮助。无论你对此的回答是什么,如果可能的话,请解释“为什么”。

    实现这一点的代码并不复杂,但在解决问题之前,请澄清您试图实现的目标。

结束

相关推荐

Slug is redirecting to 404

我有一个页面叫做菜谱。我将其更改为Recipes\\u old并更改了slug,以便创建一个新的Recipes页面。当我创建新配方页面时,slug被正确定义为/Recipes/但我无法访问该页面,WordPress正在将所有请求重定向到/Recipes\\u old/如何删除重定向?我已经删除了Recipes\\u old和Recipes。不过,slug仍在重定向。