register_sidebar() 和 get_sidebar() 如何协同工作?
-
16-10-2019 - |
题
免责声明: 我是 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 片段中。除了“页脚”之外,没有任何提及 name
, id
和 description
特性。但对我来说这似乎很奇怪 get_sidebar()
将在这些属性中搜索“页脚”。
我的要求有意义吗?是不是有什么缺失的部分?
我要问的原因是因为 - 我想更多地了解WP架构 - 我希望能够定义自定义的小部件区域,并知道如何在特定页面上渲染它。
万分感谢。
解决方案
你只是打电话 get_sidebar()
从 index.php
并加载主题文件 sidebar.php
.
register_sidebar()
, 另一方面,用于小部件,其中插件和此类要动态添加内容 sidebar.php
文件如果您的主题支持它。
在您的情况下,是否有一个文件称为 sidebar-footer.php
在您的主题目录中?
其他提示
我从来没有烦恼过 get_sidebar()
. 。相反,我只是使用 dynamic_sidebar()
. 。你可以这样称呼它:
dynamic_sidebar('first-footer-widget-area');
这样就可以处理整个侧边栏了。不再包含文件,不再杂乱的主题文件夹。如果我想要5个不同的侧边栏,它不会添加任何文件,只添加额外的功能 functions.php
.
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)
直接来自您的主题。
get_sidebar('footer')
尝试加载 sidebar-footer.php
来自主动主题。 Starkers确实提供了此文件。查看 starkers/sidebar-footer.php
事情应该变得清晰。