web-dev-qa-db-fra.com

Avoir plusieurs personnalisateurs de thème pour différentes pages est-il possible?

Si vous avez un thème qui a par exemple un blog, une page de couverture et plusieurs pages, est-il possible d'avoir plus d'un personnalisateur de thème, de sorte que vous puissiez fournir un aperçu en direct lors de la modification de styles?

Mon thème a une page d'accueil et un blog. À part l'en-tête et le pied de page, le blog ne prend pas grand-chose de la page d'accueil en raison du type de thème dont il s'agit. Si je voulais permettre aux utilisateurs de modifier à la fois la page d'accueil et les pages de blog à l'aide du personnalisateur de thème, pourrais-je exécuter plusieurs personnalisateurs; j'en ai donc un pour la page d'accueil et un pour le blog? Cela permettrait aux utilisateurs de bénéficier de la facilité d'utilisation du personnalisateur de thème, ainsi que de la prévisualisation en direct ajax. Je n'ai pas vu cela fait pour l'instant.

Je suppose que la norme dans cette situation serait soit d’offrir une page d’options supplémentaire dans le backend, soit d’ajouter des sections au personnalisateur de thème pour les autres pages (même si vous ne pourrez pas voir les modifications en temps réel).

Quelqu'un peut-il me donner des conseils sur cette situation particulière?

5
user1632018

Ce n'est pas une solution complète et le code n'est pas testé, mais il devrait suffire de vous donner une idée générale de la façon d'utiliser le personnaliseur pour différentes pages.

// Add "Edit page with customizer" link to relevant pages
add_action('admin_bar_menu', function($bar) {
    if (is_home()) {
        $bar->add_node(array(
            'id' => 'some-id-1',
            'title' => 'Edit home page with customizer',
            'href' => admin_url( 'customize.php?url=/home'),
        ));
    }
    else {
        // Same as above, but change url=/home to some other page
        // and possibly add something like &customize-page-id=PAGE_ID
        // so that you can use the page id later.
    }
 });

 // Add customizer settings based on context passed from admin-bar
 add_action( 'customize_register', function() {
     if ($_GET['url'] == '/home') {
         // Add home page customizers
     }
     else {
         // Add other page customizer where setting names are based on
         // $_GET['customize-page-id'] so that to avoid conflicts
     }
 });
});
2
stianlik