web-dev-qa-db-ja.com

特定のページに特定の動的サイドバーウィジェットを表示する

私は、完成の途中でワードプレスサイトを私に手渡しました。私が最後にワードプレスを使用してから少なくとも1年が経ちましたが、私が違っていることがたくさんあります。異なるページに異なるコンテンツを表示するのに慣れている方法は、固有のコンテンツを必要とするページごとにページテンプレートを作成することです。

ある特定のページに、他のサイトとは異なるサイドバーを表示しようとしています。 1年前に私がしたことは、このページのページテンプレートを作成して新しいサイドバーファイルを作成してから、そのサイドバーファイルをページテンプレートに含めることです。これはうまくいかないことがわかりました。私が見ることができる主な原因はloop.phploop-page.phpです。これらは昔のサイトを構築するときによく使われる省略されたテーマには存在しませんでした。しかし、私が「二十から十」というテーマをコピーして新しい名前でそれを変更する前に、誰もがこのことに手を携えていたようです。

テーマのfunctions.phpに新しい動的サイドバーを登録しました。それをDashboardのWidgetsセクションに表示して、それにウィジェットを追加することができます。

私は神の愛のためにそれを私がそれにしたいページに表示させることはできません。私は以下を試しました:

1.)ページにカスタムテンプレートtemplate_news.phpを指定し、サイドバーを呼び出す場所に次の場所に配置します。

include ('sidebar-news.php');

sidebar-news.phpフィールドに、私がsidebar.phpにリストした "News"サイドバーIDを付けてfunctions.phpからコピーしたコードが含まれています。

<?php if ( is_active_sidebar( 'sidebar-news' ) ) : ?>

<div id="secondary" class="widget-area" role="complementary">
    <ul class="xoxo">
        <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
</div>

<?php endif; ?>

ページテンプレートが正しいページに適用されます。

2.)page.phpに入り変更しました:

<?php get_sidebar(); ?>

に:

<?php 

if(is_page('18')) {
   include ('sidebar-news.php');
}
else {              
   get_sidebar(); 
} ?>

また、ページIDが正しいことを確認するために数回チェックし、代わりにスラッグ名を使用してみましたが、役に立ちません。

3.)loop-page.phpで前のものを試しました

4.)次の条件文をsidebar.phpに配置しました。

<?php
if ( is_active_sidebar( 'sidebar-news' ) && is_page('18') ) : ?>
    <div id="sidebarnews" class="widget-area" role="complementary">
    <ul class="xoxo">
    <?php dynamic_sidebar( 'sidebar-news' ); ?>
    </ul>
    </div>
<?php endif; ?>

また、いくつかの調査を行い、テーマの機能を拡張または変更するための適切な方法は、子テーマを作成することであることを見つけた後、それを試みましたが、いくつかのことに失敗しました。試して修正してください。

デフォルトの 'sidebar.php`が呼び出されてページに表示されていますが、ページIDを含む条件付きステートメントが存在していても、カスタムサイドバーウィジェットは表示されません。

私のカスタムテンプレートtemplate_news.phppage.php、またはloop-page.phpget_sidebar();を完全に削除しても何もしないようなので、ページ上でデフォルトのサイドバーがどのように呼び出されているのかもわかりません。

このサイドバーをページに追加する方法を誰かに教えてください。

1
biggles

私はあなたが必要とするかもしれないことは単に'widgets_init'フックでregister_sidebar()を実行することであると思います。 TwentyTenテーマのfunctions.phpファイルには、register_sidebar()の例がありますが、次のようになります。

add_action( 'widgets_init', 'twentyten_widgets_init' );
function twentyten_widgets_init() {
  register_sidebar( array(
    'name' => __( 'News Sidebar', 'yoursite' ),
    'id' => 'sidebar-news',
    'description' => __( 'The News Sidebar Area', 'yoursite' ),
    'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
    'after_widget' => '</li>',
    'before_title' => '<h3 class="widget-title">',
    'after_title' => '</h3>',
  ));

  /*
   * THE REST OF THE SIDEBAR REGISTRATION CODE FROM twentyten_widgets_init() GOES HERE
   */
}

また、template_news.phpページのテンプレートで、次のコードを使用してサイドバーを呼び出します。これにより、上記で作成したsidebar-news.phpファイルが読み込まれます。

<?php get_sidebar( 'news' ); ?> 

あなたが試した他のこと、そしてincludeステートメントは絶対に必要ないはずです。

2
MikeSchinkel

すべてのページに同じサイドバーがある特定のページにのみウィジェットを表示するには、次のいずれかのプラグインを使用します。

ウィジェットを表示する

指定したページのウィジェットを隠すだけです。各ウィジェットにチェックボックスを追加して、各サイトページに表示または非表示にします。

ウィジェットロジック

Widget Logicでは、WPのコンディショナルタグを使用して、どのページにウィジェットを表示するかを制御できます。それはまた 'widget_content'フィルタを追加します。

1