3

目標 - 表示中のページに応じて条件付きのセクションをサイドバーに追加します。選択したページのすべての子ページにも、条件付きセクションが表示されます。

これを行うには、少なくとも 2 つの方法があります。1) すべての条件付きフックと結果のコードを 1 つのサイドバー ファイルに含める方法と、2) 複数の sidebar.php ドキュメントを保持し、アクセスしているページに基づいてそれらを呼び出す方法です。

私はこれまでのところ両方の方法でほとんど失敗しました... :(私は現在、2番目の方法に取り組んでいます。長期的にはより柔軟になると思うからです。

<?php get_sidebar() ?> 

<?php
         if (is_page(1997) || $post->post_parent) {
 get_sidebar('sidebar-test-may12.php')
}
        else { get_sidebar()
        }   ?>

メソッドをテストすることを期待して。私が望んでいるのは、ページがページ ID 1997 またはその子ページのいずれかである場合、sidebar-test-may12.php を表示することです。それ以外の場合は、通常のサイドバーを表示します。新しいコードでは、ページ全体が空白になります。私への提案や解決策はありますか?よくある問題のようですが、私はまだそれを理解できていません。ありがとう!

4

3 に答える 3

6

コード例にはいくつかの問題があります。

1) $post->post_parent は他のものに対してチェックされていないため、子ページである場合にのみ true を返します (ターゲットにしたいページの子である必要はありません)。

2) get_sidebar()が正しく呼び出されていません。テーマ フォルダから「sidebar-test-may12.php」を取得する場合は、get_sidebar('test-may12') を呼び出す必要があります。

3) 関数呼び出しの後にセミコロンがありません

したがって、コードは次のようになります。

<?php
    if(is_page(1997) || $post->post_parent == 1997) {
        get_sidebar('test-may12'); //get sidebar-test-may12.php
    }
    else{
        get_sidebar(); //get sidebar.php
    }
?>

それが役立つかどうか教えてください。

更新: $post->post_parent は、子ページの最上位の祖先 ID を取得しないことに注意してください。深さに関係なく最上位の ID を取得したい場合は、次のようにすることを検討してください。

<?php
    $ancestors = get_ancestors(get_the_ID(), 'page');
    if(is_page(1997) || end($ancestors) == 1997)
        get_sidebar('test-may12'); //get sidebar-test-may12.php
    else
        get_sidebar(); //get sidebar.php
?>

考えられる解決策:あなたの例と私が提案した祖先チェックを構築して、親ページのスラッグに基づいてテーマに特別なサイドバーが存在するかどうかをテンプレートにチェックさせることができます。このようにして、特定のページとそのすべての子/孫/ひ孫などに特別なサイドバーが必要であると判断した場合. 「sidebar-{parent_slug}.php」という名前でテーマに追加するだけです。そう:

<?php
$id = get_the_ID();
$ancestors = get_ancestors($id, 'page');
$top_page = $ancestors ? get_page(end($ancestors)) : get_page($id);

if(locate_template('sidebar-'.$top_page->post_name.'.php'))
    get_sidebar($top_page->post_name);
else
    get_sidebar();
?>

この方法では、一般的なページ テンプレートにどのサイドバー ファイルをロードするかを決定するために、大量の条件を指定する必要はありません。

于 2012-05-07T18:17:50.693 に答える
1

簡単なウィジェットの .htaccess でエラー ログを切り替えるか、エラー トラップを使用して、php で何が起こっているかを表示します: http://wordpress.org/extend/plugins/error-log-dashboard-widget/

サイドバーのロジックをハードコードしましたが、WordPress › Widget Logic « WordPress プラグインを自分のサイトとクライアント サイトにも使用しました。is_categoryとのような単純化されたバージョンのWP条件付きで使いやすいis_page ('101')

于 2012-05-07T18:41:03.690 に答える
0

この同じ問題に取り組んでいる他の人のために、この問題を非常にうまく解決する新しいプラグインがあります。サイドバーの作成も簡単です。ここで確認できます:

http://wordpress.org/extend/plugins/custom-sidebars/

于 2012-10-11T19:05:29.780 に答える