サポート » マルチサイト » マルチサイトで親ウィジェットを共有

  • 解決済 muu9

    (@muu9)


    親サイトで新たにウィジェットを追加し、そのウィジェットを子サイトで表示させたいのですが、以下のやり方ですと表示されません。

    親サイト(blog_idは2)子サイト(blog_idは3)のfunctions.php

    function themename_widgets_init() {
    	register_sidebar(array(
            'name'          => '新規',
            'id'            => 'sidebar-4',
    	'before_widget' => '<section id="%1$s" class="widget %2$s">',
    	'after_widget'  => '</section>',
    	'before_title'  => '<h2 class="widget-title">',
    	'after_title'   => '</h2>',
        ));
    }
    add_action( 'widgets_init', 'themename_widgets_init' );

    管理画面のウィジェットでは、親サイト(’sidebar-4’)には「カスタムHTML」を追加し、子サイト(’sidebar-4’)は空の状態です。

    子サイト(blog_idは3)footer.php

    <?php
    switch_to_blog('2');
    dynamic_sidebar('sidebar-4');
    restore_current_blog();
    ?>

    ちなみに、子サイトは親サイトを複製したもので、既存のウィジェット(’sidebar-2’)(’sidebar-3’)は上記方法で表示されます。

    いろいろ検証してみましたが、行き詰まってしまいました。

    ヒントでもかまいませんのでご教授いただきたく存じます。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • CG

    (@du-bist-der-lenz)

    画像を取得している親サイトと、子サイトは絶対値でしょうか。

    muu9

    (@muu9)

    CG様

    画像はメディアライブラリから選択しておりますので、絶対値かとおもいます。
    一部伏せさせていただきましたが、以下となります。
    <img src="http://xxx/wp/wp-content/uploads/2018/12/xxx-300x128.jpg" class="image wp-image-11912 attachment-medium size-medium" style="max-width: 100%; height: auto;" sizes="100vw" width="300" height="128">
    また、今回新規作成ウィジェットで表示させたいものは「カスタムHTML」のウィジェットとなります。
    画像と記載しましたのは、例として挙げさせていただきました。
    紛らわしく申し訳ありません。親投稿も修正いたします。

    ishitaka

    (@ishitaka)

    こんにちは

    dynamic_sidebar() は switch_to_blog() を考慮しません。
    https://core.trac.wordpress.org/ticket/22370

    下記ページのコードが参考になると思います。
    https://gist.github.com/lucasstark/132511ab333f0c5fb6c4e82458ba2d20

    下記プラグインでもできそうです。試してみると良いかもしれません。
    https://ja.wordpress.org/plugins/multisite-shared-sidebar/

    muu9

    (@muu9)

    ishitaka様

    dynamic_sidebar() は switch_to_blog() を考慮しないということ、知りませんでした。
    ありがとうございます。

    また、ご教示いただいたコードですが、親子functions.phpに記載しましたが、動きませんでした。

    プラグインに関しては古いというのと、WordPress 5.0.3へ更新が控えているため見送らせていただきました。(※現在はWordPress 4.9.8)

    ishitaka

    (@ishitaka)

    functions.php に追加しただけでは動作しないと思います。
    wp_multisite_sidebar() をテンプレートに配置する必要があると思います。

    <?php wp_multisite_sidebar( 'sidebar-4' ); ?>

    ishitaka

    (@ishitaka)

    下記ページも参考になると思います。処理的には、ほぼ同じようですが・・・
    https://redtreewebdesign.com/sharing-caring-wordpress-multisite-sharing-widgets/

    muu9

    (@muu9)

    ishitaka様

    子サイトfunctions.phpにコードを記載し、footer.php(今回使用しているテンプレート)に
    <?php wp_multisite_sidebar( 'sidebar-4' ); ?>

    <?php
    switch_to_blog('2');
    wp_multisite_sidebar( 'sidebar-4' );
    restore_current_blog();
    ?>

    と記載してみましたが動きませんでした。

    あとにご教示頂いた方もやはりだめでした。

    ishitaka

    (@ishitaka)

    下記環境で先にあげた両サイトのコードを検証してみました。結果、両サイトのコードにて、子サイトに親テーマのウィジェットが表示されました。

    ・WordPress 5.0.3
    ・Twenty Seventeen テーマ

    コードをそのままコピペしたのでは動作しないと思います。一部環境に合わせて変更(下記)する必要があります。短いコードなのでコードを解析してみてください。

    get_site_url( 1 )

    muu9

    (@muu9)

    ishitaka様

    大変失礼いたしました。
    私の記載ミスで、親サイト(blog_idは1)でした。

    それを踏まえた上で子サイト(blog_idは3)footer.phpに
    <?php wp_multisite_sidebar( 'sidebar-4' ); ?>

    <?php
    switch_to_blog('1');
    wp_multisite_sidebar( 'sidebar-4' );
    restore_current_blog();
    ?>

    を記載し、

    ご教示いただいたコード
    wp_remote_get( add_query_arg( array('get_sidebar' => $sidebar), get_site_url( 1 ) ) );
    上記のように記載しましたが、動きませんでした。

    調べながら検証しておりますが、知識不足で申し訳ありません。

    ishitaka

    (@ishitaka)

    • 親サイトと子サイトのテーマは同じですか?違う場合はそれぞれのテーマにコードを記述しましたか?
    • 親サイトのサイドバー ID は ‘sidebar-4’ ですか?
    • 子サイトのサイドバーを更新しましたか?
    • サイドバー ID のチェック(is_active_sidebar( ‘sidebar-4’ ) など)をしていませんか?

    コードを理解できない場合は使用をおすすめしません。プラグインをおすすめします。

    • この返信は3 ヶ月前に  ishitaka さんが編集しました。
    muu9

    (@muu9)

    ishitaka様

    ・親子同じテーマです。それぞれのfunctions.phpにご教示いただいたサイトのコードを記載しております。
    ・親サイドバーIDは‘sidebar-4’ です。
    ・子サイドバーID(‘sidebar-4’)は空の状態で更新しています。
    ・親子ともにis_active_sidebar( ‘sidebar-4’ ) はしておりません。

    マルチサイト化するにあたり、親サイトにはsidebar-1~3はすでに存在しており、それを含めたまま親サイトを複製し、子サイトを作成しました。

    sidebar-1~3に関しては子サイトfooter.phpに

    <?php
    switch_to_blog('1');
    wp_multisite_sidebar( 'sidebar-3' );
    restore_current_blog();
    ?>

    でちゃんと表示されております。

    muu9

    (@muu9)

    ishitaka様

    子サイドバーID(‘sidebar-4’)にも親サイドバーID(‘sidebar-4’)と同じ(比較するために一部テキスト変更した)「テキストHTML」を追加して更新をしたころ、ちゃんと親サイドバーID(‘sidebar-4’)の内容が表示されました。

    ishitaka様の貴重なお時間を割いていただき、また、的確なアドバイスをしていただき、本当にありがとうございます。とても勉強になりました。

12件の返信を表示中 - 1 - 12件目 (全12件中)
  • このトピックに返信するにはログインが必要です。