web-dev-qa-db-fra.com

Comment puis-je obtenir des zones de widgets travaillant dans le personnaliseur?

Je rencontre un problème étrange avec WordPress. Je construis un thème et la personnalisation du thème est pilotée par Customizer.

Donc, essentiellement dans functions.php, j'ajoute

add_theme_support( 'widget-customizer' );

j'inscris une barre latérale avec:

register_sidebar( array(
   'name' => __( 'Test Sidebar' ),
   'id' => 'test-sidebar',
));

puis dans index.php j'ajoute le commun get_footer (); et dans footer.php j'ai:

<?php if ( is_active_sidebar( 'test-sidebar' ) ): ?>
    <div id="test-sidebar" class="sidebar">
        <?php dynamic_sidebar( 'test-sidebar' ); ?>
    </div>
<?php endif; ?>

Maintenant, le problème étrange premier est que, dans la fenêtre d'aperçu, je peux voir tout widget ajouté via la page d'administration dans Apparence mais dans la section du widget de personnalisation, je ne vois aucune zone et je reçois ce message

Il n'y a pas de zones de widget actuellement rendues dans l'aperçu. Naviguez dans l'aperçu jusqu'à un modèle qui utilise une zone de widget pour accéder à ses widgets ici.

Mais la seconde étrange problème est que si dans mon functions.php j'ajoute:

   add_action( 'wp_footer', function () {
       ?>
       <?php if ( is_active_sidebar( 'test-sidebar' ) ): ?>
            <div id="test-sidebar" class="sidebar">
            <?php dynamic_sidebar( 'test-sidebar' ); ?>
        </div>
        <?php endif; ?>
        <?php
    } );

Maintenant, je peux voir la zone du widget dans le personnalisateur.

Quel pourrait être le problème?

2
koMah

Après une nuit entière, j'ai la réponse. En réfléchissant sur les raisons pour lesquelles le personnalisateur ne montre les zones de widgets que par le biais du crochet wp_footer , j’ai vérifié mon footer.php et le problème était que wp_footer () (---) ont été appelés avant la section de la barre latérale.

   /* Always have wp_footer() just before the closing </body>
    * tag of your theme, or you will break many plugins, which
    * generally use this hook to reference JavaScript files.
    */
    wp_footer();

Le déplacer après les barres latérales fonctionne parfaitement.

0
koMah

Oui, le crochet wp_footer() est important. Si vous supprimez wp_footer hook du fichier footer.php , vous obtiendrez le message de class-wp-customize-widgets.php.

Il n'y a pas de zones de widget actuellement rendues dans l'aperçu. Naviguez dans l'aperçu jusqu'à un modèle qui utilise une zone de widget pour accéder à ses widgets ici.

Si vous supprimez le hook wp_footer, toute la section de personnalisation sera là, mais elle ne fonctionnera pas comme @WestonRuter pointu, car customize-preview.js n'y sera pas.


Je voudrais juste donner quelques conseils:

Vous n'avez pas besoin d'ajouter le plug-in add_theme_support( 'widget-customizer' );widget-customizer fait désormais partie intégrante du noyau de WordPress, et vous disposez de ce support.

L’autre chose, footer.php, n’est probablement pas l’endroit le plus intelligent pour placer votre sidebar au niveau de l’organisation. Vous pouvez consulter le thème WordPress twentysixteen pour voir l’organisation.

0
prosti