BLOG

  1. HOME
  2. ブログ
  3. WEB制作・デザイン
  4. WordPress・その他CMS
  5. 別のWordPressの投稿を取得し、そのまま同じディレクトリ構成で表示する方法
by ウラカワ ウラカワ

別のWordPressの投稿を取得し、そのまま同じディレクトリ構成で表示する方法

別のWordPressの投稿を取得し、そのまま同じディレクトリ構成で表示する方法

こんにちは、ウラカワです。

自分で書いといてあれですが、正直タイトルだけだとほぼ伝わってない気がします!

1行で上手いこと伝わる表現が思いつかなかったです!ごめんなさい!

RSSのように単純に一覧表示(詳細は外部リンク)する一般的な方法ではなく、同じサーバー上にある別のWordPressから投稿を取得し、下記の構成でサイト内に完全に組み込んだ形で表示させよう!という方法です。

  • アーカイブページ(/news/)
  • カテゴリーページ(/news-category/)
  • 詳細ページ(/news/single-news/)

Aサイトの「お知らせ」カスタム投稿タイプを、Bサイトでも「お知らせ」としてそっくりそのまま表示させる、といった感じです。

実際ありそうなのは「商品紹介」とかですかねー。それぞれ別サイトだけど取り扱ってる商品は全く同じ・・・とか。

この方法は片方のサイトだけ投稿すれば済むので更新が楽ではあるのですが、完全にコピーコンテンツになるので、インデックスされないようにするなど何かしら対策は必要です。

とりあえず前準備として、取得先のカスタム投稿タイプ・タクソノミーと同様の設定をしておく必要があります。(投稿はしないので各種uiは消しておいた方が良いと思います。)

で、実際にやってみたコードは以下です。

functions.php

注意点・解説

あれこれ悩んだのですが、最終的にループを変更するときにも使うpre_get_postsにフックしました。

条件分けはループを変更する時とほぼ一緒なのですが、is_tax()とis_singular()は引数を設定しても上手くいきません・・・

なので、query_varsでそれぞれ判定させました。

続いてDB周りの記述ですが、今回は別のDBという想定なので以下のような形になりました。(同じDB内でプレフィックスが違うだけの場合は記述が変わってくると思います。)

wpdb( ‘user’, ‘password’, ‘name’, ‘host’ )でDB接続設定、wp_set_wpdb_vars()でDB用のプレフィックスや配列がセットされます。

wp_cache_init()でキャッシュリセット。

このあたりの関数はWordPressのソース見た方が良いですね。

これでDBは切り替わるのですが、このままだとサイト情報が取得先のものになってしまいます。

そこで、以下のフィルターを使って書き換えました。

DB切り替える前に元のサイト設定を変数にセットしておいて、切り替えた後に元のサイト設定で上書きする感じです。

あとはオマケみたいなものですが、コピーコンテンツ対策としてmetaを追加して完了です。

最後に

今回カスタムメニュー・ウィジェットとかを考慮していないので、この方法を使用するページのどこかにこれらを使用していたり、導入しているプラグインによっては、さらに工夫が必要になってくると思います。

あまり使う機会が無いので当然なのですが、探しても同様の事例が無さそう・・・?少しでも参考になれば良いなーと思います。

一番の問題は正直どう検索したら良いか分からない点ですね・・・

ページの先頭に戻る