如何只显示侧边栏的一些小部件?

时间:2014-02-22 作者:danijar

我想打破三个容器上的侧边栏。每个容器应最多容纳侧栏的三个小部件。因此,我需要分别为小部件0到2、3到5和6到8查找HTML。

通常,我会使用dynamic_sidebar() 显示侧栏,但此函数不接受参数来指定我只需要侧栏的一系列小部件。而且,我发现wp_get_sidebars_widgets(), 但它并不打算用于主题。

如何仅获取动态侧栏给定范围内的小部件?例如,这就是我的想法。

// functions.php
// display range of widgets of a sidebar
function dynamic_sidebar_range($name, $from, $to)
{
    $widgets = get_dynamic_sidebar($name); // this function doesn\'t exist!
    for ($i = $from; $i < count($widgets) && $i < $to; ++$i ) {
        $widget = $widgets[$i];
        echo $widget[\'before_widget\']
           . $widget[\'before_title\']
           . $widget[\'title\']
           . $widget[\'after_title\']
           . $widget[\'content\']
           . $widget[\'after_widget\'];
    }
}

// frontpage.php
// consists of blocks of three posts or widgets alternatingly
for ($sections = 0; $sections < 3; ++$sections) {
    // display three posts
    for ($i = 0; $i < 3 && have_posts(); ++$i) {
        the_post();
        // ...
    }
    // display three widgets
    $from = $sections * 3;
    $to = $from + 3;
    dynamic_sidebar_range(\'name\', $from, $to);
}

1 个回复
SO网友:s_ha_dum

如果您想要的是“在三个容器上分解一个侧栏”,那么您实际上不需要重建dynamic_sidebar() 去做吧。有一个名为dynamic_sidebar_params 这可以用来打破侧边栏。

function add_closing($params) {
  $params[0][\'after_widget\'] = $params[0][\'after_widget\'].\'</div><!-- close wrapper-thing -->\';
  return $params;
}

add_filter(
  \'dynamic_sidebar_params\',
  function ($params) {
    static $c = 0;

    if (0 === $c || 0 === $c%3) {
      $params[0][\'before_widget\'] = \'<div class="wrapper-thing" style="border:1px solid white;float:left">\'.$params[0][\'before_widget\'];
      remove_filter(\'dynamic_sidebar_params\',\'add_closing\');
    } else {
      add_filter(\'dynamic_sidebar_params\',\'add_closing\');
    }

    $c++;
    return $params;
  }
);
我觉得这有点“代码高尔夫”的意思。我相当确信,正如评论中所建议的那样,三个不同的侧边栏是一种更好的方法。

这将把小部件包装在不同容器中的侧栏中,每个容器三个。如果您想要不同的小部件区域,那么您所做的完全是错误的。这将比单独的侧边栏更令人困惑,它将从最终用户那里删除控制。更不用说,您将需要在很大程度上重新创建核心代码。

只需按预期使用边栏系统。

结束

相关推荐

Additional Sidebar

嗨,我想在我的主题中创建额外的侧边栏,我不确定我所做的是否正确。在我的主题函数中。php我找到了这个函数: function blankslate_widgets_init() { register_sidebar( array ( \'name\' => __(\'Sidebar Widget Area\', \'blankslate\'), \'id\' => \'primary-widget-area\', \'before_widget\' =&g