it-swarm.cn

Register_sidebar()和get_sidebar()如何协同工作?

免责声明: 我是WP的新品牌。

我正在使用 Starkers HTML5框架主题 。在functions.php中,我看到了这段代码:

function starkers_widgets_init() {

  // Area 1, located at the top of the sidebar.
  register_sidebar( array(
    'name' => __( 'Primary Widget Area', 'starkers' ),
    'id' => 'primary-widget-area',
    'description' => __( 'The primary widget area', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // Area 3, located in the footer. Empty by default.
  register_sidebar( array(
    'name' => __( 'First Footer Widget Area', 'starkers' ),
    'id' => 'first-footer-widget-area',
    'description' => __( 'The first footer widget area', 'starkers' ),
    'before_widget' => '<li>',
    'after_widget' => '</li>',
    'before_title' => '<h3>',
    'after_title' => '</h3>',
  ) );

  // ... more calls to register_sidebar() ... 
}

footer.php中,我看到了这段代码:

<?php get_sidebar( 'footer' ); ?>

我不明白get_sidebar()如何知道如何获取该字符串参数并找到register_sidebar()定义的相应小部件。在我上面发布的functions.php片段中。除了nameiddescription属性之外,没有提到“页脚”。但是对我来说,get_sidebar()会在这些属性中搜索“页脚”似乎很奇怪。

这是否有意义我要问的是什么?有一些缺失的部分吗?

我问的原因是因为 - 我想了解更多关于WP架构的信息 - 我希望能够定义一个自定义窗口小部件区域,并知道如何在特定页面上呈现它。

万分感谢。

7
jessegavin

你只需从index.php调用 get_sidebar() 并加载主题文件sidebar.php

另一方面, register_sidebar() 用于小部件,其中插件等想要在sidebar.php文件中动态添加内容(如果您的主题支持它)。

在你的情况下,你的主题目录中是否有一个名为sidebar-footer.php的文件?

9
john010117

我从来没有打过get_sidebar()。相反,我只使用dynamic_sidebar()。你这样称呼它:

dynamic_sidebar('first-footer-widget-area');

这照顾整个侧边栏。没有更多的文件包含,没有更混乱的主题文件夹。如果我想要5个不同的侧边栏,它不会添加任何文件,只会在functions.php中添加额外的功能。

7
John P Bloch

get_sidebar('name')获取名为sidebar-name.php的侧边栏模板。

在sidebar-name.php中,侧边栏有HTML,并且调用dynamic_sidebar('some-name-hopefully-the-same'),这是小部件的用途。

register_sidebar(array(name=>'some-name-hopefully-the-same', ...))允许dynamic_sidebar工作。

如您所见,get_sidebar(templatename)用于侧边栏模板。如果您不需要它们,可以直接从主题中调用dynamic_sidebar(sidebarname)

4
Gerard ONeill

get_sidebar('footer')尝试从活动主题加载sidebar-footer.php。 Starkers确实提供此文件。检查starkers/sidebar-footer.php,事情应该变得清晰。

3
Annika Backstrom