我正在尝试为某些页面动态注册侧栏。页面必须符合以下标准:
在我的功能中使用模板“模板通用侧边栏”(template generic sidebar)。php我使用get_pages() 获取所有页面的列表。它统计这些页面中有多少符合上述条件,并将有关这些页面所需的信息存储在一个名为$sidebars_required:
$get_pages_args = array(
\'post_type\' => \'page\',
\'post_status\' => \'publish\'
);
$all_pages = get_pages($get_pages_args);
$counter = 0;
$sidebars_required = array();
foreach($all_pages as $page){
$page_id = $page->ID;
$page_template = get_page_template_slug($page_id);
if (strpos($page_template,\'template-generic-sidebar\') !== false) {
$counter++;
$page_details = array(
"ID" => $page_id,
"title" => $page->post_title,
"slug" => $page->post_name,
);
array_push($sidebars_required,$page_details);
}
}
在我的测试用例中,存储在
$counter =
3. 在我的测试用例中
$sidebars_required 如下所示:
array(3) {
[0]=>
array(3) {
["ID"]=>
int(27)
["title"]=>
string(8) "About Us"
["slug"]=>
string(8) "about-us"
}
[1]=>
array(3) {
["ID"]=>
int(13)
["title"]=>
string(20) "Generic Page Example"
["slug"]=>
string(20) "generic-page-example"
}
[2]=>
array(3) {
["ID"]=>
int(15)
["title"]=>
string(9) "Resources"
["slug"]=>
string(9) "resources"
}
}
但是我一直都在用不同的名称注册正确数量的边栏,因为我不知道如何正确循环我的数组来创建
$args 需要用于
register_sidebar()我已经有了
$counter 准备好指定
number 要求者
register_sidebars():
register_sidebars($counter);
但我如何才能创建
$args 使用
page_name 从我的阵列?如何循环遍历此数组,但使用它填充
$args 对于
register_sidebars()I am confused as to how register_sidebars allows for multiple sidebars to be registered when it doesn\'t allow for multiple lists of arguments to be included.
我的设想是这样的:
$args = array(
\'name\' => __($sidebars_required[0][\'title\'].\'sidebar\'),
\'id\' => \'sidebar-\'.$sidebars_required[0][slug],
\'before_widget\' => \'<li id="%1$s" class="widget %2$s">\',
\'after_widget\' => \'</li>\',
\'before_title\' => \'<h2 class="widgettitle">\',
\'after_title\' => \'</h2>\'
);
因此,在上面,提要栏的名称是
About Us Sidebar 它的ID应该是
sidebar-about-us但很明显,因为只有一个$args 列表中,无法正确注册3个不同名称的侧栏。我只能创建三个相同的侧栏。
SO网友:user1486133
我自己设法解决了这个问题。而不是使用register_sidebars() 为了将侧边栏全部注册在一起,我只使用了单数register_sidebar() 在for循环中,以便为每个匹配的页面注册一个侧栏。
要使其正常工作,只需更改模板名称(在我的情况下template-generic-sidebar) 到他们自己的模板slug/name并将此代码放入functions.php
$get_pages_args = array(
\'post_type\' => \'page\',
\'post_status\' => \'publish\'
);
$all_pages = get_pages($get_pages_args);
$counter = 0;
$sidebars_required = array();
foreach($all_pages as $page){
$page_id = $page->ID;
$page_template = get_page_template_slug($page_id);
if (strpos($page_template,\'template-generic-sidebar\') !== false) {
$counter++;
$page_details = array(
"title" => $page->post_title,
"slug" => $page->post_name,
);
array_push($sidebars_required,$page_details);
}
}
for ($i = 1; $i <= $counter; $i++) {
$array_counter = $i-1;
$args = array(
\'name\' => __($sidebars_required[$array_counter][\'title\'].\' sidebar\'),
\'id\' => \'sidebar-\'.$sidebars_required[$array_counter][\'slug\'],
\'before_widget\' => \'<li id="%1$s" class="widget %2$s">\',
\'after_widget\' => \'</li>\',
\'before_title\' => \'<h2 class="widgettitle">\',
\'after_title\' => \'</h2>\'
);
register_sidebar($args);
}