register_sidebar()和get_sidebar()如何一起工作?


8

免责声明:我是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体系结构的更多信息-我希望能够定义一个自定义小部件区域,并知道如何在特定页面上呈现它。

万分感谢。

Answers:


9

您只需get_sidebar()从调用index.php,它就会加载主题文件sidebar.php

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

就您而言,sidebar-footer.php主题目录中是否有一个名为的文件?


9

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

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

这样就解决了整个侧边栏。不再包含文件,不再混乱的主题文件夹。如果我想使用5个不同的侧边栏,则不添加任何文件,仅添加中的其他功能functions.php


对于Starkers,sidebar-footer.php有条件地调用dynamic_sidebar()所有适当的小部件区域。
Annika Backstrom

可能是正确的,但是如果您知道正在运行的版本,则无需有条件地调用它;如果可以直接调用该函数,为什么还要运行一个include?
约翰P布洛赫

5

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)直接从主题中调用。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.