web-dev-qa-db-ja.com

Wordpress Multisite:すべてのサブブログにメインブログのヘッダーとフッターを同じにする

私は次のことをやろうとしています:

私はメインブログと何十ものサブブログを持っています。私はすべてのサブブログが同じテーマ(またはまだ子テーマ、まだわからない)を使用したいが、すべてのサブブログにメインブログの同じnavigationitemを持っていたいですか?フッターについても同じです。

どうしたらいいですか。

これが私のメインブログとランディングページです。

enter image description here

SubblogをクリックしてSubblogを選択した場合、コンテンツ領域に影響を与えたいだけで、ヘッダーとフッターはネットワーク全体で同じままにしておく必要があります。

enter image description here

サブブログのコンテンツ領域内では、サブブログのページと投稿を使用したいと思います。

これを行う正しい方法は何ですか?


更新:

<ul role="navigation">
    <?php

        //wp_list_pages('title_li=&depth=1&exclude=42,311');

        $args = array(
            'authors'      => '',
            'child_of'     => 0,
            'date_format'  => get_option('date_format'),
            'depth'        => 1,
            'echo'         => 0,
            'exclude'      => '42,311',
            'include'      => '',
            'link_after'   => '',
            'link_before'  => '',
            'post_type'    => 'page',
            'post_status'  => 'publish',
            'show_date'    => '',
            'sort_column'  => 'menu_order, post_title',
            'title_li'     => '', 
            'walker'       => ''
        );

        $menu = wp_list_pages( $args );
        update_option('network_menu', $menu);
        echo $menu;
    ?>
</ul>

私の子供のテーマでは

<ul role="navigation">
    <?php 
        $menu = get_option('network_menu');
            echo $menu;
    ?>
</ul>
2
mathiregister

switch_to_blog()関数を使えます

ユーザーがrestore_current_blog()関数を呼び出すまでアクティブなブログを切り替えます。この関数は、他のブログから投稿やその他の情報を取得する必要がある場合に便利です。restore_current_blog()を使用した後に元に戻すことができます。この機能を使用しても、切り替えたブログでのみ実行されるプラグインはロードされません。

そのため、メインブログから常にヘッダーとフッターのコンテンツを取得しながら、サブブログの内部コンテンツを保持するようにテーマを編集できます。

あなたのテーマのheader.phpとfooter.phpファイル(そしておそらく他のいくつかのテンプレートファイル**)では、サイトナビゲーションをつかむフックと関数の前にswitch_to_blog($id_of_main_blog)を置き、後にrestore_current_blog()を置く。

**テーマに応じて正確な配置を微調整する必要があります。

0
Douglas.Sesar

1つのサイトで使用される親テーマと他のすべてのサイトでそのテーマの子テーマを作成します。親テーマのヘッダaでは、メニューを構築するために通常のwp_nav_menu()呼び出しを行います。ただし、エコーはしません。

代わりにメニューを変数に返し、それをupdate_optionに渡してからエコーしてください。あなたの子供のテーマのheader.phpで、そのすべてをget_option()への呼び出しで置き換えて、結果をエコーバックしてください。

親テーマ:

     $args = array('echo' => false);
     $menu = wp_nav_menu( $args);
     update_option('network_menu', $menu);
     echo $menu;

子供のテーマ:

     $menu = get_option('network_menu');
     echo $menu;

これにより、ネットワーク内のすべてのサイトのメニューを制御するためにメニューシステムを使用したサイトが1つになります。

2
JPollock

最も柔軟な方法は、この機能をプラグインにラップすることです。これをmu-pluginsフォルダにドロップすると、自動的にすべてのサイトで使用されます。あるいは、ネットワークを有効にして同じ効果を得ることもできます。このアプローチの利点は、あなたがそれを簡単にオンまたはオフにすることができ、それがテーマテストに役立つことができるあなたのサイトのこの局面をモジュール化するということです。

コーデックスから

現在のブログを別のブログに切り替えます。 switch_to_blog()は、他のブログから投稿やその他の情報を取得する必要がある場合に便利です。

あとでrestore_current_blog()を使って元に戻すことができます。この関数は最後のブログの切り替えアクション、通常はswitch_to_blog()への最新の呼び出しのみを元に戻すことに注意してください。複数のswitch_to_blog()が使用されている場合の処理​​方法については、以下の例を参照してください。

Switch_to_blog()はリソースを大量に消費すると言う人もいますが、テスト中に問題は発生していません。

Andrea Rは plugin を書き、WordPressキャッシュを使ってこの問題にアプローチし、更新時にキャッシュをフラッシュしますが、以下の方法はより柔軟です。

私はあなたが構築できる基本的な例を描きます。実際にはヘッダやフッタには何も追加されませんので、プラグインAPIを使ってテーマにフックする必要があります。

<?php
/**
 * Plugin Name: Header-Footer
 * Plugin URI: example.com
 * Description: 
 * Author:
 * Author URI:
 */


$main_site = 1;

function make_menu() 
{
    $args = array(
            'authors'      => '',
            'child_of'     => 0,
            'date_format'  => get_option('date_format'),
            'depth'        => 1,
            'echo'         => 0,
            'exclude'      => '42,311',
            'include'      => '',
            'link_after'   => '',
            'link_before'  => '',
            'post_type'    => 'page',
            'post_status'  => 'publish',
            'show_date'    => '',
            'sort_column'  => 'menu_order, post_title',
            'title_li'     => '', 
            'walker'       => ''
        );

        $menu = wp_list_pages( $args );
        update_option('network_menu', $menu);
        echo $menu;

}
// Test if we're on a sub-site
if (!is_main_site())
{
    //Switch to the main site
    switch_to_blog( $main_site );       
        make_menu();
    restore_current_blog();
} 
// Else use normal methods
else
{
    make_menu();
}

がんばろう!

0
jeanpier_re