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);
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 )) }
kvexさん kzさん
ありがとうございます。
エラーは出なくなりましたが、
出力される class は
<li class=””>
と空になってしまいました。
実は以前の解決済みのフォーラムで
指定ページ+それ以下の子階層(全子供)で分岐する方法
を見て参考になると思ったのですが、
具体的なコードが分からなかったので
困っておりました。
検証しました。
指定した親ページの配下の子ページ・孫ページにいる場合に
指定した親ページの li にclass=”current_page_item”などと付与させ
ましたのでご希望通りです。
では無いなら、ご希望をさらに具体的にお知らせいただくと良いです。
出力される class は
<li class="">
と空に
子ページ,孫ページの li についてはご要望記述が見当たらないので <li class="">
としています。
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" (略)
(略)
kzさん
上記のコード大変参考になりました。
色々とありがとうございました。
echo の前に
in_array( ‘1’, $ancestors ) !== false
と記述することで解決することが出来ました。
kvexさん kzさん
ありがとうございました。