同じサーバー内に別々に設置しているWPのページの共有
-
はじめて質問させていただきます。
個人事業で同じサーバー内に独自ドメインとそのサブドメインで業務毎にそれぞれのWPで10サイトを運用しています。データベースも同じです。
***.com
××.***.com
××.***.com
…その中で、全く内容が同じページ(事務所概要や特定商取引法に基づく表記等々)が複数あるのですが、1箇所を訂正するたびに、他のすべてのサイトを修正しなければならないのがとても面倒です。
それを1箇所の編集ですべて更新できる方法はないかと、色々調べているのですが…。
マルチサイト化は考えていません。このようなことは可能でしょうか?
できれば、プラグインのImproved Include Pageのようなものやショートコードなどを使って簡単にできる方法が希望ですが。見よう見まねではじめたWPですので、知識も乏しいのですが
足りないことは追記しますので、どなたかご教授いただければ嬉しいです。
-
プラグインやショートコードというご要望からは外れますが、RSSを取得して表示するという方法があります。
ikaringさま、ありがとうございます。
RSSについての知識もなかったので、色々調べて試行錯誤はしてみました。汗固定ページにphpを書くのはあまりよろしくないという事なので、
functions.phpに以下を追加して/* 記事内にphpファイルをインクルード */ function Include_my_php($params = array()) { extract(shortcode_atts(array( 'file' => 'default' ), $params)); ob_start(); include(get_theme_root() . '/' . get_template() . "/myphpfiles/$file.php"); return ob_get_clean(); } add_shortcode('myphp', 'Include_my_php');
そして表示したい固定ページに、次のショートコードを貼って
[myphp file='test']
test.phpとして、教えていただいたリンク先の
<h2><?php _e('Recent news from Some-Other Blog:'); ?></h2> <?php // RSS フィードを取得します。 include_once(ABSPATH . WPINC . '/feed.php'); $rss = fetch_feed('http://***.com/rss/feed/goes/here'); if (!is_wp_error( $rss ) ) : // ちゃんとフィードが生成されているかをチェックします。 // すべてのフィードから最新5件を出力します。 $maxitems = $rss->get_item_quantity(5); // 0件から始めて指定した件数までの配列を生成します。 $rss_items = $rss->get_items(0, $maxitems); endif; ?> <ul> <?php if ($maxitems == 0) echo '<li>No items.</li>'; else // 取得できた RSS フィードが0件の時は「No items.」と表示します。 // 取得できた RSS フィードが1件以上あった時は、以下のように RSS のデータを繰り返します。 // なお、取得したい RSS のデータは、$itemにあるデータであれば、他のデータも表示させることができます。 // 以下では、取得してきた外部の RSS フィードの記事タイトルを表示して、その記事へのリンクを実現しています。 foreach ( $rss_items as $item ) : ?> <li> <a href='<?php echo $item->get_permalink(); ?>' title='<?php echo 'Posted '.$item->get_date('j F Y | g:i a'); ?>'> <?php echo $item->get_title(); ?></a> </li> <?php endforeach; ?> </ul>
と、url以外はそのままでトライしてみましたが表示されません。
きっと根本的な考え方が間違っているのでしょうね。また特定の固定ページをどのようにして指定したらいいのか、わからなかったのと
最新記事も5件もいらないけど、どこを削っていいのかもわかりません。自分が管理しているサイトの固定ページの共有ですので、もっと簡単な方法があるのかと思っていましたが、私には難しいです。
ご面倒ですが引き続き、ご教授下さいませ。
こんにちわ。
そもそもな質問になるのですが・・・
「固定ページをRSS出力している」のですか?
※固定ページのRSS出力というのも変な話ですが・・・。WP でご要望の内容を行いたいのであれば、マルチサイトで最初から運営するのが一番簡単なのですが、マルチサイト化する気はないということですので、プラグインを作ってしまえばよいかと思います。
- サイト情報を登録できる設定ページの作成
- 1 のサイト情報または固定ページを JSON データで出力する API を作成
- JSON データを処理 / 表示できるショートコードを作成
こんな感じでしょうか?または、JSON REST API を使うのもよいかもしれません。
不勉強なまま書き込んでしまい、ご迷惑おかけしました。
feedに固定ページを含めることができるプラグインもあるようですが(RSS Includes Pagesなど)、JSON REST APIはわかりやすくて良さそうですね。KUCKLUさま、ありがとうございます。
きっと、知識のある人にはとてもよい方法なんだと思います。
でも私のレベルでは???
とりあえずJSON REST API プラグインを入れてみました。
http://****.com/wp-json/とすると、よくわからないデータがドバーとでてくるのですが。親サイトの固定ページをサブドメインのサイトの固定ページに表示させたいのですが、その特定の固定ページのIDはどこで指定すればいいのでしょうか?
JSON形式のデータを取得したら、それをどのように変換するのでしょうか?
色々検索して調べてみましたが、羅列されたデータをまたhtmlで組み直すというイメージなのでしょうか?私の知識では、とっても難しそうなのですが。マルチサイトにした方が簡単に実現できるのでしょうか?
一度試しにやってみた事があるのですが、その時にも、固定ページの共有方法がわからず、便利さを感じられずに戻してしまいました。無知な質問ばかりですみません。
固定ページ一覧を取得する場合は下記のような URL で取得できます。
http://example.com/wp-json/posts?type=page
特定のページを取得する場合は下記のような URL で取得できます。
// Post ID 1234 の場合 // 今回の場合は、こちらですかね。 http://example.com/wp-json/posts/1234
その他、Filter を追加する事で並べ変えも可能です。
機能が多すぎてここでは説明しきれないので、JSON REST API のドキュメントをご覧いただければと思います。また、URL を開くと表示されているものは、JSON になります。
JavaScript の Ajax などで処理するか、PHP で処理するなどしていただければと思います。特定のページの情報を取得して表示するショートコードを作ってみました。
使用中のテーマの functions.php などに記述してください。function my_get_json_remote_content_shortcode( $atts ) { extract( shortcode_atts( array( 'url' => '', ), $atts ) ); if ( !isset( $url ) || empty( $url ) || !wp_http_validate_url( $url ) ) return; $parse_url = parse_url( $url ); $key = 'json_rest_api_' . str_replace( array( '.', '-' ), '_', $parse_url['host'] ) . str_replace( array( '.', '-', '/' ), '_', $parse_url['path'] ); $cache = get_transient( $key ); if ( !$cache ) { $response = wp_remote_get( $url ); if ( !is_wp_error( $response ) && $response['response']['code'] === 200 ) { $response = json_decode( $response['body'] ); $cache['title'] = apply_filters( 'the_title', $response->title ); $cache['excerpt'] = apply_filters( 'the_excerpt', $response->excerpt ); $cache['link'] = $response->link; set_transient( $key, $cache, 12 * HOUR_IN_SECONDS ); } else { return '<p>Error</p>'; } } $result = sprintf( '<h2><a href="%s">%s</a></h2><p>%s</p>', esc_url( $cache['link'] ), $cache['title'], $cache['excerpt'] ); return $result; } add_shortcode( 'get_remote_content', 'my_get_json_remote_content_shortcode' );
使用方法はこちらです。
[get_remote_content url="http://example.com/wp-json/posts/1234" /]
表示させる内容や、エラー処理などはご自身でカスタマイズしてみてください。
KUCKLUさま、ありがとうございます。
色々ショートコードまで作って下さり、本当に感謝いたします。でも私、はっきり言って、html位しかわからず、PHP もJavaScript の Ajax も未知の領域です。汗
特定のページの取得方法もありがとうございます。
自分で調べても、投稿ページについての記事が多く困っていました。
やっとA(元サイト)の特定固定ページのJSONが見れました。これをB(表示させたいサイト)の、テンプレートの中に一旦page-test.phpとかを新たに作り、JavaScript の Ajax などで変換して、教えて頂いたショートコードで固定ページに表示するという理解でいいのでしょうか?
それとも、教えて頂いたショートコードで、JSONデータをBの固定ページで取得して表示させる?
よくわからなかったので、とりあえずfunctions.php に教えて頂いたままコードを貼りつけて、固定ページに
[get_remote_content url=”http://***.com/wp-json/posts/6″ /]
と貼りつけると以下が表示されます。(翻訳された内容)
[{“ID”:375、 “post_author”: “2”、 “post_date”: “2015年2月6日12時54分06秒」、「post_date_gmt”: “2015年2月6日 9時40分22秒」、「post_modified_gmt “:” 2015年2月9日本当はfunctions.phpの中のどこかに表示させたいサイトのURLをいれなければいけない?
自分のサイト内の事ですので、もっと簡単だと甘く考えていました。
本当に無知ですみません。仮のシナリオとして以下をもとに説明いたします。
- JSON REST API プラグインを example.com にインストールした
- example.com の固定ページ ( ID: 1224 ) の内容を example.net の固定ページに表示させたい
手順
- example.com/wp-json/posts/1234 で 固定ページのJSON が出力されているのを確認する。
- 1 の動作が問題無い場合、example.net の使用中のテーマの functions.php に僕が昨日書いたショートコードのソースコードを記述する。
- example.net の投稿 or 固定ページの本文中に以下ショートコードを記述して記事を保存。
[get_remote_content url="http://example.com/wp-json/posts/1234" /]
KUCKLUさま、わかりやすいご説明ありがとうございます。
手順1.2.3.をすると、先程書いたものが
[{"ID":375,"post_author":"2","post_date":"2015-02-06 12:54:06","post_date_gmt":"2015-02-06
example.net の固定ページに表示されます。
はい、固定ページを更新して表示すると、最初に原文のデータがドバーと出て、その後翻訳された
[{“ID”:375,”post_author”:”2″,”post_date”:”2015-02-06 12:54:06″,”post_date_gmt”:”2015-02-06
が表示されます。
では、ショートコードを削除した場合はどうなりますか?
[{"ID":375,"post_author":"2","post_date":"2015-02-06 12:54:06","post_date_gmt":"2015-02-06
は消えますか?仮に消えた場合、
[get_remote_content url="http://dev.visualive.jp/wp-json/posts/2" /]
これで試してみれいただけますか。
横からすみません。
私もKUCKLUさんのコードを試してみたのですが、期待通りに動作しています。kein4231さんの投稿で「翻訳された」と書かれている部分がよくわからないのですが、何が翻訳されているのでしょうか。
また、
[get_remote_content url="http://***.com/wp-json/posts/6" /]
とIDが6のものを取りにいかれているのに、[{"ID":375,....
とIDが375のjson(?)が表示されているのはどういうことなんでしょうね。
- トピック「同じサーバー内に別々に設置しているWPのページの共有」には新たに返信することはできません。