フォーラム

[解決済み] ページごとにサイドバーのコンテンツを入れ替えたい。 (6 件の投稿)

  1. aratakojima
    メンバー
    3 years前の投稿 #

    こんにちは。

    「あるページにいる場合にサイドバーの内容が変わる」というコードの作り方で悩んでいます。

    <li><a href="hoge">メニュー</a>
    <?php if(is_page(array('a','b','d'))): ?>
      <?php echo '<ul class="child">';
      wp_list_pages('child_of=10&amp;depth=1&amp;title_li=');
      echo '</ul>';
      ?>
    <?php endif; ?>
    </li>

    といったことをやっており、あるページにいる場合のみ子ページが出現するようなことをしたいと思っています。

    現状はこのコードでもいけるのですが、いかんせん「a,b,d」のページを増やしたり減らしたりすることが多く、そのたびにテンプレートをいじることがしんどいのです。

    このようなことを自動化させるというか、テンプレートタグやPHP、もしくはプラグインなどで解決することができるでしょうか?教えてください、よろしくお願いします。

  2. jim912
    世話役
    3 years前の投稿 #

    aratakojimaさん、こんにちは。

    あるページにいる場合のみ子ページが出現するようなことをしたいと思っています。

    あるページ(a,b,d)の条件はなんでしょう?
    条件がなければ、自動化することはできません。逆に条件があれば、自動化は可能です。

    たとえば、a,b,dがID10の子ページだとするなら、

    <?php if(is_page(array('a','b','d'))): ?>


    <?php if( $post->post_parent == 10 ): ?>

    と書き替えることができます。
    親ページを持たないページであれば

    <?php if( $post->post_parent == 0 ): ?>

    です。
    ID10を先祖に持つページの場合は、下記が参考になるでしょう。
    選択ページの一番上の親のID取得方法

  3. spais
    メンバー
    3 years前の投稿 #

    ページ ID をハードコーディングしたくないのであればカスタムフィールドという手もあります。

    <?php if(is_page(array('a','b','d'))): ?>

    これを以下のように置き換えれば child というカスタムフィールドに visible が格納されたページであった場合に TRUE となります。

    <?php if( get_post_meta( $post->ID, 'child', true ) === 'visible' ):?>

    wp_list_pages('child_of=10&amp;depth=1&amp;title_li=');

    推測ですが、これは「リストを表示したいページの親ページ」が 10 なのでしょうか。
    だとすると以下に置き換えてしまっても良いと思います。

    wp_list_pages( "child_of={$post->post_parent}&amp;depth=1&amp;title_li=" );

    が、表示したい子ページのリストが特定の親ページの子ページであった場合には使えませんね。

  4. aratakojima
    メンバー
    3 years前の投稿 #

    お二人ともすいません。僕の説明がちょっとマズイですね(苦笑)

    いやいや、それでもヒントは得られました。親ページのIDやらそのへんを取得するなどをうまく使い回すと何かしらいけそうですね。今まで敬遠してきたのですが、これを期にやってみます。

    ありがとうございます。

  5. spais
    メンバー
    3 years前の投稿 #

    こちらこそお役に立てなくてすいません。
    質問と回答の具体性は比例しますので、回答者がソースコードから質問者のやりたい事を汲み取ってあげなければならないような質問の仕方だと、どうしても例示されたソースコードに限定した回答となってしまいます。
    これは「回答者がどれだけ質問者の気持ちを読み取れるか」と言う能力に依存しますが、概ねどなたも同じベクトルの回答になってしまうと思います。

    抽象的にしか表現できない質問というのであれば、複数のユースケースを用いて質問の本質的な部分を濃く表現するのも手だと思います。

    質問の具体性を明確にするよう追記を行った上で別の回答を望むのであればこのままでも良いと思いますが、質問を終了されるおつもりであればトピックを閉じた方が他の方の負荷になりませんのでご検討下さい。

  6. aratakojima
    メンバー
    3 years前の投稿 #

    spaisさん、ありがとうございます。

    質問を閉じたあと、お礼を述べるのを忘れていました。すいません。

返信

ログイン しなければ投稿できません。

About this Topic

Tags

タグ はまだありません。