我想要做的是在主题激活中预先填充侧栏小部件区域,并使用一些默认小部件。如何在主题激活时在侧栏上填充小部件
if (! dynamic_sidebar('sidebar')) :
不添加小部件,但它亘古不变的部件部分的侧边栏和
if (is_active_sidebar('sidebar')) {
此功能亘古不变的工作,如果该部件没有在侧边栏部件化的区域装现身。
我知道这是可能的,但我只是出于主意。我GOOGLE了,但没有找到任何解决方案。感谢您提前提供任何帮助。
我想要做的是在主题激活中预先填充侧栏小部件区域,并使用一些默认小部件。如何在主题激活时在侧栏上填充小部件
if (! dynamic_sidebar('sidebar')) :
不添加小部件,但它亘古不变的部件部分的侧边栏和
if (is_active_sidebar('sidebar')) {
此功能亘古不变的工作,如果该部件没有在侧边栏部件化的区域装现身。
我知道这是可能的,但我只是出于主意。我GOOGLE了,但没有找到任何解决方案。感谢您提前提供任何帮助。
从您的答案中可以看出,如果您使用after_switch_theme
钩子,但是您需要设置小部件的那一刻。
要激活小部件,我建议将它直接写入数据库get_option('sidebars_widgets')
应该给出一个数组,并将其保存为update_option('sidebars_widgets', $new_activated_widgets)
。
这应该有助于您开始使用。
/**
* set new widgets on theme activate
* @param string $old_theme
* @param WP_Theme $WP_theme
*/
function set_default_theme_widgets ($old_theme, $WP_theme = null) {
// check if the new theme is your theme
// figure it out
var_dump($WP_theme);
// the name is (probably) the slug/id
$new_active_widgets = array (
'sidebar-name' => array (
'widget-name-1',
'widget-name-2',
'widget-name-3',
),
'footer-sidebar' => array(
'widget-name-1',
'widget-name-2',
'widget-name-3',
)
);
// save new widgets to DB
update_option('sidebars_widgets', $new_active_widgets);
}
add_action('after_switch_theme', 'set_default_theme_widgets', 10, 2);
经过测试,只需将其粘贴到您的主题的functions.php
即可。
如果其他人需要知道如何将多个默认小部件(不同实例)同时添加到多个侧边栏,则以下代码会将小部件添加到页面和管理小部件选项卡下。我意识到这可能对除我以外的每个人都很明显。
因此,基于janw和kcssm的辛苦:
function add_theme_widgets($old_theme, $WP_theme = null) {
$activate = array(
'right-sidebar' => array(
'recent-posts-1',
'categories-1',
'archives-1'
),
'footer-sidebar' => array(
'recent-posts-2',
'categories-2',
'archives-2'
)
);
/* the default titles will appear */
update_option('widget_recent-posts', array(
1 => array('title' => ''),
2 => array('title' => '')));
update_option('widget_categories', array(
1 => array('title' => ''),
2 => array('title' => '')));
update_option('widget_archives', array(
1 => array('title' => ''),
2 => array('title' => '')));
update_option('sidebars_widgets', $activate);
}
add_action('after_switch_theme', 'add_theme_widgets', 10, 2);
然而,这将删除任何其他设置,因此谨慎行事!
非常感谢您的回复,但请您举出一个完整的例子。我无法让它工作。什么应该是'$ new_activated_widgets'和它应该在哪里被勾住?谢谢 – kcssm 2012-08-02 11:17:56
@kcssm我用示例代码更新了我的答案。你只需要弄清楚如何检查它是你的主题。 – janw 2012-08-02 17:43:37
谢谢@janw, 我从你的例子中得到了启动器,然后我发现我们还需要更新小部件标题以及例如。 'update_option('widget_categories',array('title'=>'My Categories')); update_option('sidebars_widgets',array(“sidebar”=> array(“categories”)));' 再次感谢, Sanam – kcssm 2012-08-22 09:56:51