サポート » 使い方全般 » 現在の子ページ・孫ページにいる場合、親ページをアクティブ表示

  • 解決済 karu96

    (@karu96)


    皆様初めまして。

    wp_list_pages()では、そのページを指すリストアイテムには
    current_page_item というクラスが追加され、スタイルを指定しておりますが、

    今回、wp_list_pages()は使わずに、
    指定した親ページの配下の子ページ・孫ページにいる場合に
    指定した親ページの li にclass=”current_page_item”などと付与させ、
    現在のページの親ページという表現でアクティブ表示させたいのです。

    PHPは詳しくないのご教示いただけたらと思います。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • wp_list_pages() を使う方法(未検証)
    functions.php に以下を追加:

    function my_page_css_class( $css_class, $page ) {
      if ( in_array( 'current_page_ancestor', $css_class ) {
        if( in_array( $page->ID, array( 12, 34, 56 ) ) ) {  //  指定親ページをIDno配列で指定
          return array( 'current_page_item' );
        }
      }
      return array();
    }
    add_filter( 'page_css_class', 'my_page_css_class', 10, 2);

    トピック投稿者 karu96

    (@karu96)

    kzさん

    ご回答誠にありがとうございます。
    上記のコードをfunctions.phpに追加したところ、
    下記のエラーが出てしまいました。
    Parse error: syntax error, unexpected '{' in /***/functions.php on line 7
    上記のコードですと、2行目にあたる行です。

    環境は wordpress2.9.2
    テスト中のテーマファイルは default です。

    括弧が1個足りないだけでは?
    if ( in_array( ‘current_page_ancestor’, $css_class ) {

    if ( in_array( ‘current_page_ancestor’, $css_class )) }

    トピック投稿者 karu96

    (@karu96)

    kvexさん kzさん

    ありがとうございます。
    エラーは出なくなりましたが、
    出力される class は
    <li class=””>
    と空になってしまいました。

    実は以前の解決済みのフォーラムで
    指定ページ+それ以下の子階層(全子供)で分岐する方法
    を見て参考になると思ったのですが、
    具体的なコードが分からなかったので
    困っておりました。

    検証しました。

    指定した親ページの配下の子ページ・孫ページにいる場合に
    指定した親ページの li にclass=”current_page_item”などと付与させ

    ましたのでご希望通りです。
    では無いなら、ご希望をさらに具体的にお知らせいただくと良いです。

    出力される class は
    <li class="">
    と空に

    子ページ,孫ページの li についてはご要望記述が見当たらないので <li class=""> としています。

    トピック投稿者 karu96

    (@karu96)

    kzさん

    ありがとうございます。
    現在、ページ上部に横並びのグローバルメニュー(親ページ:画像リンク)を配置させております。
    グローバルメニューは、

    <ul>
    <li><a href="http://example.jp/example1/"><img src="example1.jpg" alt="親ページ1" /></a></li>
    <li><a href="http://example.jp/example2/"><img src="example2.jpg" alt="親ページ2" /></a></li>
    <li><a href="http://example.jp/example3/"><img src="example3.jpg" alt="親ページ3" /></a></li>
    </ul>

    としています。
    今回理由あって、リンクは直接画像を配置して使うので個々にテンプレートに直接書いております。

    サイドメニューでは、現在の親ページの時にその配下のページを出力させています。

    $ancestor = array_pop(get_post_ancestors($post->ID));
    if (is_page() && $post->post_parent ) {
    $parent=$post->post_parent;
    } else {
    $parent=$post->ID;
    }

    などとして、wp_list_pages() を使って出力させております。
    ※サイドメニューについては今回の質問内容とは関係ないとおもいますが一応

    やりたい内容は、ある親ページまたはその親ページの子ページ
    (1階層下も2階層下も3階層下も・・・とにかく子供全部)だったら
    グローバルメニューのその親ページの画像を違う画像に変えてアクティブ表示したいのですが…
    わたしが思うように実現するために、気になるところは以下です。
    ・画像リンクを使っているので個々に親ページをIDなどで指定したい。
    ・個々に親ページを指定する際、親ページの下には何階層あるかは決まっていない。
    説明が下手ですいません。

    未検証:

    $ancestors = get_post_ancestors( $post->ID );
    (略)
    (略) <img src=ex1"<?php echo (in_array( 1, $ancestors ) ? '-active' : ''); ?>.jpg"  (略)
    (略) <img src=ex2"<?php echo (in_array( 2, $ancestors ) ? '-active' : ''); ?>.jpg"  (略)
    (略)

    トピック投稿者 karu96

    (@karu96)

    kzさん

    上記のコード大変参考になりました。
    色々とありがとうございました。

    echo の前に

    in_array( ‘1’, $ancestors ) !== false

    と記述することで解決することが出来ました。

    kvexさん kzさん

    ありがとうございました。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「現在の子ページ・孫ページにいる場合、親ページをアクティブ表示」には新たに返信することはできません。