2012-08-01 99 views
3

我想要做的是在主题激活中预先填充侧栏小部件区域,并使用一些默认小部件。如何在主题激活时在侧栏上填充小部件

if (! dynamic_sidebar('sidebar')) : 

不添加小部件,但它亘古不变的部件部分的侧边栏和

if (is_active_sidebar('sidebar')) { 

此功能亘古不变的工作,如果该部件没有在侧边栏部件化的区域装现身。

我知道这是可能的,但我只是出于主意。我GOOGLE了,但没有找到任何解决方案。感谢您提前提供任何帮助。

回答

8

从您的答案中可以看出,如果您使用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即可。

+0

非常感谢您的回复,但请您举出一个完整的例子。我无法让它工作。什么应该是'$ new_activated_widgets'和它应该在哪里被勾住?谢谢 – kcssm 2012-08-02 11:17:56

+0

@kcssm我用示例代码更新了我的答案。你只需要弄清楚如何检查它是你的主题。 – janw 2012-08-02 17:43:37

+0

谢谢@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

1

如果其他人需要知道如何将多个默认小部件(不同实例)同时添加到多个侧边栏,则以下代码会将小部件添加到页面和管理小部件选项卡下。我意识到这可能对除我以外的每个人都很明显。

因此,基于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); 

然而,这将删除任何其他设置,因此谨慎行事!

相关问题