【发布时间】:2015-06-07 11:11:35
【问题描述】:
我正在使用一个名为“Wordpress Page Widgets”的 wordpress 插件。这个小部件允许我在每页添加小部件并通过模板中的“dynamic_sidebar('sidebar')”显示它们。
因为我想完全控制我网站上的每个页面,包括存档页面,我已经在页面区域中创建了每个页面实例,包括存档页面所在的页面,并且只通过页面 id 加载内容slug 名称匹配。
function theme_page_id_by_slug(){
global $post;
$post_type = $_GET['post_type'] ? $_GET['post_type'] : get_post_type($post->ID);
$post = get_post(get_page_by_path(str_replace(get_home_url().'/','',get_post_type_archive_link($post_type))));
return $post;
}
这种方法几乎适用于我可以通过页面 id 实际获取内容或 post_meta 的所有实例。但是侧边栏不接受任何页面 id 参数。因此我必须编写一个函数,以便它可以通过页面 id 显示小部件。
function theme_sidebar(){
$post = theme_page_id_by_slug();
$sidebar = get_post_meta($post->ID, '_sidebars_widgets', true);
foreach($sidebar['sidebar'] as $k => $v){
$v = explode('-',$v);
array_pop($v);
foreach($v as $k2 => $v2){
the_widget('WP_Widget_'.ucfirst($v2));
}
}
}
“Wordpress 页面小部件”插件将小部件 id 库存储在 post_meta 中,这很好,但“the_widget”使用小部件类名作为参数,这是不可靠的,因为并非我遇到的每个小部件都以“WP_Widget_”。
我想过使用“global $wp_widget_factory”列出所有小部件,然后根据 post_meta 过滤结果。
谁能指出我正确的方向?
【问题讨论】:
标签: php wordpress widget sidebar