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

Publié par Jean-Michel le

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 thème enfant, pas encore sûr) mais aient les mêmes éléments de navigation du blog principal sur tous les sous-blogs ? Idem pour le pied de page.

Comment j’ai fait ça ?

Ceci est mon blog principal et ma page de destination

entrez la description de l'image ici

Si je clique sur Sous-blogs et choisis un sous-blog, je veux juste 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.

entrez la description de l'image ici

Dans la zone de contenu d’un sous-blog, j’aimerais utiliser les pages et les articles du sous-blog.

Quel est le bon moyen de le faire?


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

Solution n°1 trouvée

L’approche la plus flexible consiste à intégrer cette fonctionnalité dans un plugin. Si vous le déposez dans votre dossier mu-plugins, il sera automatiquement utilisé sur tous les sites. Alternativement, 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 et cela rend cet aspect de votre site modulaire, ce qui peut faciliter les tests de thème.

Du Codex

Basculez le blog actuel vers un autre blog. switch_to_blog(), est utile si vous avez besoin d’extraire des messages ou d’autres informations d’autres blogs.

Vous pouvez ensuite revenir en arrière en utilisant restore_current_blog(). Notez que cette fonction annule uniquement la dernière action de changement de blog, généralement l’appel le plus récent à switch_to_blog(). Voir l’exemple ci-dessous sur la façon de 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 WordPress puis vide le cache lors de la mise à jour mais la méthode ci-dessous est plus flexible.

Je vais dessiner un exemple de base sur lequel vous pouvez vous baser. Cela n’ajoute rien à l’en-tête ou au pied de page, vous devrez 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!

Solution n°2 trouvée

Ce que je ferais, c’est 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, vous feriez un appel wp_nav_menu() normal pour construire votre menu, sauf que vous ne l’échoiriez pas.

Au lieu de cela, renvoyez le menu dans une variable, passez-le à update_option, puis faites-le écho. Dans le header.php de votre thème enfant, remplacez tout cela par un appel à get_option() et faites écho aux 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;

L’effet de ceci serait que vous auriez un site où vous utiliseriez le système de menu pour contrôler le menu de chaque site du réseau.

Solution n°3 trouvée

Vous pourriez utiliser la switch_to_blog()fonction

Bascule le blog actif jusqu’à ce que l’utilisateur appelle la fonction restore_current_blog(). Cette fonction est utile si vous avez besoin d’extraire des messages ou d’autres informations 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 plugins qui ne s’exécutent que sur le blog vers lequel vous basculez.

Ainsi, vous pouvez modifier votre thème pour toujours extraire du contenu d’en-tête et de pied de page du blog principal, 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 de modèle**), placez switch_to_blog($id_of_main_blog)avant les crochets/fonctions qui saisissent la navigation du site et se placent restore_current_blog()après.

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

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *