Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress 如何在主题激活时在侧边栏上填充小部件_Wordpress_Widget_Sidebar - Fatal编程技术网

Wordpress 如何在主题激活时在侧边栏上填充小部件

Wordpress 如何在主题激活时在侧边栏上填充小部件,wordpress,widget,sidebar,Wordpress,Widget,Sidebar,我想做的是用一些关于主题激活的默认小部件预先填充边栏小部件区域 if ( ! dynamic_sidebar( 'sidebar' ) ) : 确实添加了小部件,但它没有显示在小部件的侧栏部分和 if ( is_active_sidebar( 'sidebar' ) ) { 如果窗口小部件未加载到边栏widgetized区域,则此函数不起作用 我知道这是可能的,但我只是不知道。我在谷歌上搜索,但没有找到任何解决办法。感谢您提前提供的帮助。您的回答不清楚是否使用了钩子,但您需要设置小部件的那一

我想做的是用一些关于主题激活的默认小部件预先填充边栏小部件区域

if ( ! dynamic_sidebar( 'sidebar' ) ) :
确实添加了小部件,但它没有显示在小部件的侧栏部分和

if ( is_active_sidebar( 'sidebar' ) ) {
如果窗口小部件未加载到边栏widgetized区域,则此函数不起作用


我知道这是可能的,但我只是不知道。我在谷歌上搜索,但没有找到任何解决办法。感谢您提前提供的帮助。

您的回答不清楚是否使用了钩子,但您需要设置小部件的那一刻

要激活小部件,我建议使用
get_选项(“侧边栏_小部件”)
将其直接写入数据库,该选项应提供一个数组,并使用
update_选项(“侧边栏_小部件”),$new_activated_小部件)将其保存。

这应该可以帮助你开始

/**
 * 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\u activated\u widgets
,它应该挂在哪里?Thanks@kcssm我已经用示例代码更新了我的答案。你只需要找出如何检查它是否是你的主题。谢谢@janw,我从你的示例中获得了入门知识,然后我发现我们也需要更新小部件标题,例如,
update_选项('widget_categories',array('title'=>'My categories');更新_选项('sidebar_widgets',数组(“sidebar”=>array(“categories”))