web-dev-qa-db-ja.com

サイドバーとサイドバーウィジェットを登録する。サイドバーウィジェットが表示されない

サイドバーとサイドバーウィジェットを登録しています。

テーマは現在2つのサイドバーをサポートしています。プライマリとセカンダリ。

add_action('widgets_init', array($this, 'add_sidebars'), 10, 2);

public function add_sidebars(){
    register_sidebar(array(
        'name' => 'Primary Sidebar',
        'id' => 'mbe-sidebar-primary-sidebar',
        'description' => '',
        'class' => 'mbe-sidebar',
        'before_widget' => '<div id="%1$s" class="widget %2$s">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>'
    ));
    register_sidebar(array(
        'name' => 'Secondary Sidebar',
        'id' => 'mbe-sidebar-secondary-sidebar',
        'description' => '',
        'class' => 'mbe-sidebar',
        'before_widget' => '<div id="%1$s" class="widget %2$s">',
        'after_widget' => '</div>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>'
    ));
    $this->add_sidebar_widgets();
}

それから私はすべてのプリセットウィジェット(投稿タイプからの投稿オブジェクト)を利用可能なサイドバーウィジェットとして追加します。

private function add_sidebar_widgets(){
    global $mbe_content;
    $widgets = $mbe_content->get_content('archive', 'mbe-sidebar-widgets');
    if(!$widgets){
        return;
    }
    foreach($widgets as $widget){
        wp_register_sidebar_widget(
            'mbe-sidebar-widget-'.$widget['post_name'],
            $widget['post_title'],
            array($this, 'display_widget'),
            array(
                'description' => 'Sidebar Widget'
            ),
            ''
        );
    }
}

public function display_widget($args, $params){
    echo 'widget';
}

私はこれらのサイドバーウィジェットをプライマリサイドバーのアクティブウィジェットとしても設定しました。今、例えば、テーマレベルで、私はただ動的サイドバーを使用したいのであれば...

if(is_active_sidebar('mbe-sidebar-primary-sidebar')){
    dynamic_sidebar('mbe-sidebar-primary-sidebar');
} else{
    echo 'NO PRIMARY WIDGETS!'.PHP_EOL;
}

それは私のウィジェットからの「ウィジェット」を示しています、しかしそれは私のウィジェットのための出力が起こる場所です。だからそれは問題ではありません。要点は、動的サイドバーが機能していること、そしてウィジェットの出力先を確認できることです。

私が抱えている質問は、サイドバーに単純なデフォルトのWordPressウィジェットを追加した場合、どうすればサイドバーに何も出力されないということです。まるで存在しないか何かのようです。

WordPressが提供するデフォルトのサイドバーウィジェットをサイドバーにも出力できるようにしながら、ウィジェットをサイドバーに出力するにはどうすればよいですか?

私はもともとそれが私のfunction display_widget()だと思ったので、私はすべてのウィジェットを取得し、それらをループし、そしてそれらの各ウィジェットIDでthe_widget()を呼び出すことを試みました。

3
Michael Ecklund

あなたのテーマからあなたのテンプレートファイルをチェックしてください。他のウィジェットが有効になっていない場合、手動で追加されているウィジェットがあるかもしれません。

その場合は、サイドバーテンプレートの条件文を変更して、デフォルト設定の後にウィジェットが出力されるようにします。

@s_ha_dumは基本的に一番下まで来ました。

1
MikeNGarrett