使用数组中的数据注册多个侧边栏

时间:2015-08-06 作者:user1486133

我正在尝试为某些页面动态注册侧栏。页面必须符合以下标准:

在我的功能中使用模板“模板通用侧边栏”(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个不同名称的侧栏。我只能创建三个相同的侧栏。

1 个回复
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);
    }

结束

相关推荐

Converting Posts to Pages

所以我的网站后端有问题,我的托管公司已经为我解决了。在这样做的过程中,他们无意中制作了我所有的页面和帖子。我正在查看承载此功能的数据库post_type 柱我的问题是,如果我更改值post 到page, 这篇文章会再次成为一页吗?如果没有,我如何转换它们?