如何让窗口小部件区域在定制器中工作?

时间:2016-12-03 作者:koMah

我在WordPress上遇到了一个奇怪的问题。我正在构建一个主题,主题定制由Customizer驱动。

所以,基本上是在函数方面。我正在添加php

add_theme_support( \'widget-customizer\' );
我正在注册侧边栏:

register_sidebar( array(
   \'name\' => __( \'Test Sidebar\' ),
   \'id\' => \'test-sidebar\',
));
然后在index.php 我正在添加公共get_footer(); 并且在footer.php 我有:

<?php if ( is_active_sidebar( \'test-sidebar\' ) ): ?>
    <div id="test-sidebar" class="sidebar">
        <?php dynamic_sidebar( \'test-sidebar\' ); ?>
    </div>
<?php endif; ?>
现在first 奇怪的是,在预览窗口中,我可以在外观中看到通过管理页面添加的任何小部件,但在customizer小部件部分,我看不到任何区域,我收到了此消息

预览中当前没有呈现的小部件区域。在预览中导航到使用小部件区域的模板,以便在此处访问其小部件。

但是second 奇怪的是,如果在我的函数中。php I添加:

   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
    } );
现在我可以在customizer中看到小部件区域。

有什么问题吗?

2 个回复
最合适的回答,由SO网友:koMah 整理而成

整整一夜之后,我终于找到了答案。反思为什么定制者只通过wp_footer 钩子我已经检查过了footer.php 问题是wp_footer() 在侧栏部分之前调用。

   /* 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();
在侧边栏之后移动它,一切都很好。

SO网友:prosti

wp_footer() 挂钩很重要。如果删除wp_footerfooter.php 您将从中获得消息的文件class-wp-customize-widgets.php.

预览中当前没有呈现的小部件区域。在预览中导航到使用小部件区域的模板,以便在此处访问其小部件。

如果删除wp_footer 钩子整个customizer部分将在那里,但它不会像@WestonRuter指出的那样工作,因为customize-preview.js 不会在那里。

我只想提供一些提示:

您不需要添加add_theme_support( \'widget-customizer\' );widget-customizer 插件现在是WordPress核心不可或缺的一部分,您已经准备好了支持。

另一件事,footer.php 可能不是让你的边栏组织明智的最明智的地方。您可以检查twentysixteen WordPress主题,查看组织。

相关推荐

About wordpress child themes

我对WordPress和儿童主题有一些问题。据我所知,如果我不想在更新主题时失去任何东西,使用子主题是很重要的。我是WordPress的初学者,到目前为止,我一直在使用PageBuilder(管理面板上的板载自定义选项)自定义我的网站,并在“附加CSS”选项中加入几行CSS。所有这些都是在主主题上完成的(只是玩转尝试学习),现在我想开始使用一个儿童主题。问题如下:我不知道我是否可以像通过管理界面设计父主题那样设计我的子主题,或者我是否必须通过文本编辑器(在我的计算机上,然后通过FTP等方式上传)对所有内容