如何在主题激活的侧栏上填充小部件

时间:2012-08-01 10:39:04

标签: wordpress widget sidebar

我要做的是在主题激活时使用一些默认小部件预填充侧边栏小部件区域。

if ( ! dynamic_sidebar( 'sidebar' ) ) :

会添加小部件,但它不会显示在小部件部分和

的侧边栏中
if ( is_active_sidebar( 'sidebar' ) ) {

如果窗口小部件未在侧边栏窗口小部件区域中加载,则此功能不起作用。

我知道这是可能的,但我只是出于想法。我用谷歌搜索,但没有找到任何解决方案。感谢您提前提供任何帮助。

2 个答案:

答案 0 :(得分: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即可。

答案 1 :(得分: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);

然而,这将删除任何其他设置,因此请小心谨慎!