web-dev-qa-db-fra.com

Wordpress Multisite: même en-tête et pied de page que le blog principal sur tous les sous-blogs

J'essaie de faire ce qui suit:

J'ai un blog principal et des dizaines de sous-blogs. Je veux que tous les sous-blogs utilisent le même thème (ou un thème enfant, mais je ne suis pas encore sûr) mais ont les mêmes éléments de navigation que le mainblog sur tous les sous-blogs? La même chose pour le pied de page.

Comment j'ai fait ça?

Ceci est mon blog principal et ma page d'atterrissage

enter image description here

Si je clique sur Sous-blogs et choisis un sous-blog, je souhaite simplement que la zone de contenu soit affectée. L'en-tête et le pied de page doivent rester les mêmes sur l'ensemble du réseau.

enter image description here

À l'intérieur de la zone de contenu d'un sous-blog, j'aimerais plutôt utiliser les pages et les messages du sous-blog.

Quel est le bon moyen de le faire?


Mettre à jour:

<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>

dans mon thème enfant, je fais:

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

Vous pouvez utiliser la fonction switch_to_blog()

Bascule le blog actif jusqu'à ce que l'utilisateur appelle la fonction restore_current_blog (). Cette fonction est utile si vous devez extraire des publications ou d’autres informations à partir d’autres blogs. Vous pouvez ensuite revenir en arrière après avoir utilisé restore_current_blog (). L'utilisation de cette fonction ne chargera pas les plug-ins qui ne s'exécutent que sur le blog auquel vous basculez.

Ainsi, vous pouvez éditer votre thème de manière à toujours extraire du blog principal un contenu d’en-tête et de pied de page tout en conservant le contenu interne des sous-blogs.

Dans les fichiers header.php et footer.php de votre thème (et peut-être d'autres fichiers modèles **), placez switch_to_blog($id_of_main_blog) avant les crochets/fonctions qui saisissent la navigation sur le site et placez restore_current_blog() après.

** Vous devrez modifier les emplacements exacts en fonction du thème.

0
Douglas.Sesar

Ce que je voudrais faire est de créer un thème parent qui est utilisé sur un site et un thème enfant de ce thème pour tous les autres sites. Dans l'en-tête du thème parent a, vous feriez un appel régulier à wp_nav_menu () pour construire votre menu, sauf que vous ne le feriez pas en écho.

Au lieu de cela, renvoyez le menu dans une variable, transmettez-le à update_option puis faites-le afficher. Dans le fichier header.php de votre thème enfant, remplacez tout cela par un appel à get_option () et indiquez les résultats.

Thème parent:

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

Thème enfant:

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

Cela aurait pour effet de créer un site sur lequel vous utiliseriez le système de menus pour contrôler le menu de chaque site du réseau.

2
JPollock

L'approche la plus flexible consiste à intégrer cette fonctionnalité dans un plugin. Si vous déposez ceci dans votre dossier mu-plugins, il sera automatiquement utilisé sur tous les sites. Sinon, vous pouvez simplement l'activer en réseau pour obtenir le même effet. L'avantage de cette approche est que vous pouvez facilement l'activer ou la désactiver, ce qui rend cet aspect de votre site modulaire, ce qui peut vous aider à tester les thèmes.

Du codex

Basculez le blog actuel sur un autre blog. switch_to_blog (), est utile si vous devez extraire des publications ou d'autres informations d'autres blogs.

Vous pouvez ensuite revenir en arrière en utilisant restore_current_blog (). Notez que cette fonction n'inverse que la dernière action de commutation de blog, généralement l'appel le plus récent à switch_to_blog (). Voir l'exemple ci-dessous pour savoir comment procéder lorsque plusieurs switch_to_blog () sont utilisés.

Certaines personnes disent que switch_to_blog () consomme beaucoup de ressources, mais je n'ai rencontré aucun problème lors de mes tests.

Andrea R a écrit un plugin qui aborde ce problème en utilisant la mise en cache de WordPress, puis vide le cache lors de la mise à jour, mais la méthode ci-dessous est plus flexible.

Je vais tirer un exemple de base sur lequel vous pouvez vous appuyer. En fait, cela n'ajoute rien à l'en-tête ou au pied de page, vous devez donc vous connecter à vos thèmes à l'aide de l'API du plugin.

<?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();
}

Bonne chance!

0
jeanpier_re