动态侧边栏区域不适用于主题定制器

时间:2016-10-18 作者:LCabezal

我正试图在WordPress站点中为每页创建一个侧边栏区域。例如,如果WordPress安装有两个页面:“主页”和“博客”,那么将有两个侧栏区域,“主页侧栏区域”和“博客侧栏区域”。我想我可以循环浏览页面并动态创建边栏区域,如下所示:

// functions.php
add_action( \'widgets_init\', \'xxx_widgets_init\' );
function xxx_widgets_init() {

    $args = array( \'post_type\' => \'page\' );

    $the_query = new WP_Query( $args );

    if ( $the_query->have_posts() ) {

        while ( $the_query->have_posts() ) {

            $the_query->the_post();

           register_sidebar( array(
             \'name\'          =>  \'Widget name\',
             \'id\'            => \'widget-id-\' . $post->ID,
             \'description\'   => __( \'Widget desc\', \'xxx\' ),
             \'before_widget\' => \'<div>\',
             \'after_widget\'  => \'</div>\',
             \'before_title\'  => \'\',
             \'after_title\'   => \'\',
           ) );

        }

        //Restore original Post Data
        wp_reset_postdata();

    }

}
这是可行的,我可以看到每页一个侧边栏区域。此外,如果我创建了第三个页面,那么第三个侧边栏区域会像预期的那样立即创建,不会出现任何问题。

我进入外观>小部件,在动态侧栏区域添加一些小部件,它们成功保存。

The issue is, there is a unexpected behavior when doing this exact same thing, but in the theme customizer:

如果我转到Customizer>Widgets>[我可以在这里看到我的widget区域OK]>。。。如果我尝试添加一个小部件,what appears to be an infinite autosave is triggered, and it\'s not possible to add, edit or move widgets around. 你能告诉我这种创建动态小部件区域的方法是否有什么问题吗?

1 个回复
最合适的回答,由SO网友:Nathan Powell 整理而成

在这种情况下,创建新的查询对象不是一个好主意。尝试简单地获取页面并使用这些对象来提供小部件区域:

add_action( \'widgets_init\', \'my_243057_widgets_init\' );

function my_243057_widgets_init() {

    /**
     * Get only published page objects
     * @link: https://codex.wordpress.org/Function_Reference/get_pages
     */
    $pages = get_pages();

    foreach ( $pages as $page ) {

        register_sidebar( array(
            \'name\'          =>  \'Widget name\',
            \'id\'            => \'widget-id-\' . $page->ID,
            \'description\'   => __( \'Widget for page: \' . $page->post_title ),
            \'before_widget\' => \'<div>\',
            \'after_widget\'  => \'</div>\',
            \'before_title\'  => \'\',
            \'after_title\'   => \'\',
        ) );
    }
}

相关推荐

My widgets do not save

每次我保存我的小部件并离开页面时,我的小部件都会消失。侧边栏已完全清空,不会保存任何更改。控制台或PHP日志中没有任何错误。如果我将小部件直接复制并保存在数据库中widgets_text, 它们将被显示,但我仍然无法在侧边栏中添加或删除任何内容。这只发生在我的右侧边栏上,左侧边栏工作正常,但它们都以相同的方式注册。这是我注册侧边栏的方式:function my_widgets_init() { register_sidebar( array ( \'name\'