web-dev-qa-db-ja.com

単一の投稿に独自のドメイン名を持たせる方法

ここでどの解決策が最適なのかわからないが、探しているのはページ編集画面でメタボックスを介してオプションのドメインを入力し、wordpressが使用するデフォルトのページテンプレートからテンプレートを選択するだけの簡単な方法です。 。

新しいドメインのA名前レコードを手動で追加し、それをメインWebサイトが使用しているのと同じIPを指すようにして、コードを使用してこの新しいドメインへの要求を許可選択した特定のページテンプレートを利用しながらIDを投稿します。

ページが両方のドメインからアクセス可能であり、新しいドメインだけが定義済みテンプレートを利用することを望みます。

どうすればこれができますか?

updatedもう一つの方法は、マルチサイトで使われている組み込みのワードプレスコードを使って独自のサブドメインを持つことができるように、まず単一のページを設定することでしょうか。つまり、カスタムサブドメインを特定の投稿IDに割り当てることができる場合、このサブドメインへのcnameレコードを新しいドメインに設定することができます。これを達成するための最善の方法はわかりません。

2

このコードでカスタムのメタ値を設定することができ、ドメイン名(またはコードを編集した場合はサブドメイン)がそれと一致する場合、クエリはその投稿と一致するように変更されます。ページテンプレートはそのリクエストにのみ使用され、「通常の」URLを介したリクエストには使用されません。

これは、そのページのリンクを変更しません。「通常の」サイトにアクセスするのか、それともサブドメインに留まるのか?

DNS側でこれをどのように解決するかは、おそらく サーバー障害の質問です

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;
}
1
Jan Fabry

更新された回答

さて、サイトAで投稿を作成し、必要に応じてその投稿をサイトBに公開することを可能にする書き込みパネルのオプションが欲しいと思えます。それは面白いプロジェクトのように思え、 を使って可能です。 WordPressとXMLRPC

これは いくつかのサンプルコード です。この記事のコードをカスタムメタボックスと組み合わせることで、目標を達成できるはずです。がんばろう!

ここにいくつかのより良いリソースがあります:

N.B.投稿に対して行った更新がシンジケートされるようにするには、その投稿のpost_IDをリモートサイトのカスタムフィールドに保存することもできます。あなたはおそらく最初のリモート投稿が送信される前に数分の遅延を実装するべきです(私はほとんど何でも公開した直後に必然的に変更を加えることを知っていますが、それは私だけかもしれません)。


元の答えは下にあります


(i).htaccessをmod_rewriteで設定して投稿URLをマスクする、(ii)RSSを使用してwp_insert_postを使用して投稿を複数サイトにシンジケートする、または(iii)テーマ内に post-redirect というフォルダを作成以下のファイルが含まれています。

  • post-redirect-meta.php - postmetaテーブルに保存するテキスト入力ボックスを持つ "Post Redirect URL"という名前のメタボックスを作成します。

  • post-redirect.php - "Post Redirect"というテーマテンプレートを作成します。これは条件付きで(HTTPリファラーに基づいて) "Post Redirect"に保存されたターゲットURLを使用して301リダイレクトを実行します。投稿編集ページのURLメタボックス。これにより、元の投稿を新しいドメインのフレームに表示できます。

あなたの述べた要件に基づくと、これらは最も簡単な解決策のように思えますが、これがあなたの意図であることは明らかではありません(例えば " 両方のドメインからアクセスできるようにしたい "とはどういう意味ですか?)両方のサイトでWPが稼働していますか?2つのサイト間のビジネス上の関係は何ですか?)あなたがあなたが達成しようとしている最終結果とあなたの最も重要な懸念のリストをより明確に説明するならば、それは助けとなるでしょう。可能であれば、これに対するあなたの答えが何であれ、「なぜ」も説明してください。

これを実現するためのコードは複雑ではありませんが、問題を解決する前に、達成しようとしていることを明確にしてください。

1
joelhaus