我正试图在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. 你能告诉我这种创建动态小部件区域的方法是否有什么问题吗?
最合适的回答,由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\' => \'\',
) );
}
}