サポート » 使い方全般 » 同じサーバー内に別々に設置しているWPのページの共有

  • 解決済 kein4231

    (@kein4231)


    はじめて質問させていただきます。

    個人事業で同じサーバー内に独自ドメインとそのサブドメインで業務毎にそれぞれのWPで10サイトを運用しています。データベースも同じです。

    ***.com
    ××.***.com 
    ××.***.com

    その中で、全く内容が同じページ(事務所概要や特定商取引法に基づく表記等々)が複数あるのですが、1箇所を訂正するたびに、他のすべてのサイトを修正しなければならないのがとても面倒です。
    それを1箇所の編集ですべて更新できる方法はないかと、色々調べているのですが…。
    マルチサイト化は考えていません。

    このようなことは可能でしょうか?
    できれば、プラグインのImproved Include Pageのようなものやショートコードなどを使って簡単にできる方法が希望ですが。

    見よう見まねではじめたWPですので、知識も乏しいのですが
    足りないことは追記しますので、どなたかご教授いただければ嬉しいです。

8件の返信を表示中 - 16 - 23件目 (全23件中)
  • トピック投稿者 kein4231

    (@kein4231)

    KUCKLUさま

    試しに新規で固定ページを作成してショートコードを入れたら出来ました!!
    ありがとうございます。

    [get_remote_content url=”http://dev.visualive.jp/wp-json/posts/2″ /]
    でも、サンプルページが見れました。

    表示が途中で切れていたのですが、KUCKLUさんのサンプルサイトのように、続きを読むといれる設定になっているという事ですよね?
    これを、全部表示するのに、どこをどうすればいいのかは、JSON REST API のドキュメントで勉強ですよね。

    本当にご親切にありがとうございました。

    トピック投稿者 kein4231

    (@kein4231)

    ikaringさんも、色々ありがとうございました。

    これを、全部表示するのに、どこをどうすればいいのかは、JSON REST API のドキュメントで勉強ですよね。

    試しに my_get_json_remote_content_shortcode() 内の

    $response = json_decode( $response['body'] );

    の下で

    var_dump($response);

    としてみてください。何も表示されない場合は、キャッシュが効いているので別の ID でトライするか delete_transient() を使ってキャッシュを削除してみてください。
    あ、説明不足だったのですが、サーバー負荷軽減のために簡易キャッシュを使っています。
    12 時間キャッシュされるようになっています。

    set_transient( $key, $cache, 12 * HOUR_IN_SECONDS );

    の部分がキャッシュ時間の設定とキャッシュの生成です。 delete_transient() を使えばキャッシュを手動で削除する事もできます。

    トピック投稿者 kein4231

    (@kein4231)

    ありがとうございます。すごいです~
    キャッシュが効いているみたいなので、別IDでトライしてみました。
    最初と最後以外はすべて完璧に表示されました~!!

    最初と最後に以下のような
    object(stdClass)#2867 (25) { ["ID"]=> int(24) ["title"]=> string(30) "プライバシーポリシー" ["status"]=> string(7) "publish" ["type"]=> string(4) "page" ["author"]=> object(stdClass)#2869 (12) { ["ID"]=> int(1) ["username"]=> string(7) "***" ["name"]=> string(7) "natsuko" ["first_name"]=> string(0) "" ["last_name"]=> string(0) "" ["nickname"]=> string(7) "***" ["slug"]=> string(7) "***" ["URL"]=> string(0) "" ["avatar"]=> string(0) "" ["description"]=> string(0) "" ["registered"]=> string(25) "2011-06-22T08:24:55+00:00" ["meta"]=> object(stdClass)#2870 (1) { ["links"]=> object(stdClass)#2871 (2) { ["self"]=> string(38) "http://***.com/wp-json/users/1" ["archives"]=> string(44) "http://***.com/wp-json/users/1/posts" } } } ["content"]=> string(3212) "
    ものがでてきました。

    あと

    $result = sprintf( '<h2><a href="%s">%s</a></h2><p>%s</p>', esc_url( $cache['link'] ), $cache['title'], $cache['excerpt'] );
    
    	return $result;

    これは最初のデータを繰り返すので、削除するんですよね?

    ついでに、すみません。
    delete_transient()
    これはどこに入れるのでしょう?

    もうホントに感動です~!

    var_dump して出てきたものが $response に入っているデータです。
    僕が提示したソースコードは抜粋にしているので、本文を表示させるように改変する場合は下記のようになります。

    この部分を

    $cache['excerpt'] = apply_filters( 'the_excerpt', $response->excerpt );

    こう変更する、または下に追記します。

    $cache['content'] = apply_filters( 'the_excerpt', $response->content );

    次にこの部分を

    $result = sprintf( '<h2><a href="%s">%s</a></h2><p>%s</p>', esc_url( $cache['link'] ), $cache['title'], $cache['excerpt'] );

    こう変更します。

    $result = sprintf( '<h2><a href="%s">%s</a></h2><p>%s</p>', esc_url( $cache['link'] ), $cache['title'], $cache['content'] );

    これで、タイトルと本文が表示されます。

    次に、delete_transient() についてですが、delete_transient() は set_transient() でセットしたキャッシュを強制的に削除するものになります。通常はあまり使用はしません。
    ただ、今回はデバッグ段階なので、デバッグ時にキャッシュがあると鬱陶しいので、delete_transient() を使って強制的に削除しようという目的です。
    12 時間経てばキャッシュは自動削除されますので、別 ID でデバッグしてるのであれば無視してもいいと思います。
    もし、実装するとしたら、WordPress がデバッグモードの時だけ毎回強制的にキャッシュを削除するようにするといいと思います。

    $cache     = get_transient( $key );
    if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
        delete_transient( $key );
    }

    こんな感じです。
    データがちゃんと保存されているか確認したい場合は、if の前で var_dump( $cache ); としてあげれば確認できます。
    注意として、WordPress がデバッグモードの場合は毎回キャッシュは削除されるので気をつけてください。

    こちらが上記を修正した版です。

    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 ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
            delete_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['content'] = apply_filters( 'the_content', $response->content );
                $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['content'] );
    
        return $result;
    }
    add_shortcode( 'get_remote_content', 'my_get_json_remote_content_shortcode' );
    トピック投稿者 kein4231

    (@kein4231)

    KUCKLUさま

    すごいです、本当にご親切にありがとうございました。
    思わず、まるっとコピペしてしまいました。(笑)

    すべて完璧に表示されるようになりました。
    これで、1つ修正した後にコピペをしまくる作業が大幅に効率化されます。

    このフォーラムは、難しすぎて私には場違いかもと思いましたが、勇気を出して質問してみてよかったです。
    本当に感謝感謝です、ありがとうございました。

    トピック投稿者 kein4231

    (@kein4231)

    解決済みです

8件の返信を表示中 - 16 - 23件目 (全23件中)
  • トピック「同じサーバー内に別々に設置しているWPのページの共有」には新たに返信することはできません。