3

私がやろうとしているのは、テーマのアクティブ化時にサイドバーウィジェット領域にいくつかのデフォルトウィジェットを事前に入力することです。

if ( ! dynamic_sidebar( 'sidebar' ) ) :

ウィジェットは追加されますが、ウィジェットセクションのサイドバーには表示されません。

if ( is_active_sidebar( 'sidebar' ) ) {

ウィジェットがサイドバーのウィジェット化された領域にロードされていない場合、この関数は機能しません。

私はそれが可能であることを知っていますが、私はただ考えがまとまっていません。グーグルで検索しましたが、解決策が見つかりませんでした。よろしくお願いします。

4

2 に答える 2

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テスト済みです。テーマに貼り付けるだけです。

于 2012-08-01T11:46:43.840 に答える
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);

ただし、これにより他の設定が削除されるため、慎重に踏み込んでください。

于 2014-08-06T13:01:21.917 に答える