web-dev-qa-db-ja.com

カスタムサイドバーにウィジェットを保存できない

私はToolset Bootstrap Themeの子テーマに取り組んでいます。カスタムサイドバーを作成する必要があるので、新しいサイドバーを子テーマのfunction.phpファイルに登録しました。

function wpbootstrap_register_newsidebar() {

/* Register the new sidebar. */
register_sidebar(
    array(
        'id' => 'sidebar-999',
        'name' => __( 'Home sidebar', 'wpbootstrap' ),
        'description' => __( 'This sidebar will display only on the homepage.', 'wpbootstrap' ),
        'before_widget' => '<aside id="%1$s" class="widget %2$s">',
        'after_widget' => '</aside>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>'
    )
);
} add_action( 'widgets_init', 'wpbootstrap_register_newsidebar' );

管理画面に新しいサイドバーが表示され、そこにウィジェットをドラッグし、タイトルを追加し、それらを並べ替えることができますが、ページをリロードすると、ウィジェットのすべてがサイドバーから消えます。親テーマにはすでに3つのウィジェット化された領域があり、それはうまく機能します。これらの領域にウィジェットを追加して保存することができます。また、Twenty Fourteenのようなデフォルトのテーマに切り替えて、上で貼り付けたのと同じコードを使用してカスタムサイドバーを登録しようとすると、完全に機能的なカスタムサイドバー領域が得られます。だから私のコードは問題ではないようです。

私は親テーマのベンダーサポートフォーラムに質問を投稿しようとしましたが、まだ聞いていないので、万が一似たような問題に遭遇した場合に備えてより広いWPコミュニティに依頼することを考えました。

私はWPの教祖ではないし、カスタムウィジェット化領域がどのように作成されWP環境内に格納されるかについてはあまり知りませんが、誰かが私を正しい方向に向けることができればそれについてもう少し学んで幸せになりましょう。

残念ながら、私はウェブサイトのローカル開発版に取り組んでいるので、テスト用のURLを提供することはできません。

1
kikaweb

さて、ついにサポートチームは私の質問に答えました、そして本当の解決策がないとしても、回避策を提案しました。答えはベンダーユーザーフォーラムに深く埋め込まれているので - ここにリンク - 私は誰かと同じ問題がある場合に備えてここで解決策を共有しています。これか別のテーマ。

基本的に、これは親テーマ(Toolset Bootstrap)のバグであり、カスタムサイドバーをリセットします。この振る舞いを無効にするために、サポートチームの提案に従って、私はサイドバーを登録するためにこのコードの断片を使用しました。

//Override check sidebar widgets filter in child theme
function wpbootstrap_checksidebars_widgets($sidebars_widgets) {
    return $sidebars_widgets;
}
add_filter('sidebars_widgets','wpbootstrap_checksidebars_widgets' );
//Now user can add custom widget areas
function custom_widget_areas_init() {
    register_sidebar( array(
    'name' => 'Front Page Widget Area',
    'id' => 'frontpage-widgets',
    'before_widget' => '<div>',
    'after_widget' => '</div>',
    'before_title' => '<h2 class="rounded">',
    'after_title' => '</h2>',
    ) );
}
add_action( 'widgets_init', 'custom_widget_areas_init' );

これで、ウィジェットは新しく登録されたサイドバーに残ります。とにかく私を助けようとしたユーザーに感謝します。

1
kikaweb

サイドバーのID(php関数内)は小文字にする必要があります!!!!!!!!!!!

2
T.Todua

これは私にとっては適切にテストされるようです。

function register_home_sidebar() {

/* Register the new sidebar. */
register_sidebar(
    array(
        'id' => 'home-sidebar',
        'name' => __('Home Sidebar'),
        'description' => __( 'This sidebar will display only on the homepage.'),
        'before_widget' => '<aside id="%1$s" class="widget %2$s">',
        'after_widget' => '</aside>',
        'before_title' => '<h3 class="widget-title">',
        'after_title' => '</h3>'
          )
     );
} add_action( 'widgets_init', 'register_home_sidebar' );

他の名前で呼ばれている関数があるかもしれませんか?

1
Howard E