このサイトって、多くの人に見てもらうために作成したサイトではないので
GoogleAnalyticsも実験で入れたぐらいで、活用してませんでした^^;
で、フとしたきっかけでGoogleAnalytics見てみたんですが
結構「wp_list_pages exclude_tree」の検索ワードで
このサイトの「wp_list_pages関数exclude_treeの複数指定」に
来られているみたいです。
来て下さるのは本当に有り難いことなのですが、
もう二年近く前の記事ですし、書いた解決方法は
本体ファイルを改編する方法なので、
バージョンアップの度に改編が必要で非常に良くないです。
自分自身、WordpressのVer3.0の時に記事修正して以来
すっかり記事を書いたことすら忘れていましたが、
改めてVer3.3のWordpress本体のソースを見たところ、
未だ不具合のままのようです。
…って事で、今度はfunction.phpで
対処する方法を記載しておきます。
関数にて対応する方法です。
function.phpに以下を記述
// exclude_tree対応
function mee_wp_list_pages( $args ) {
// wp_list_pagesと同じ引数を設定。
$defaults = array(
'depth' => 0,
'show_date' => '',
'date_format' => get_option('date_format'),
'child_of' => 0,
'exclude' => '',
'title_li' => __('Pages'),
'echo' => 1,
'authors' => '',
'sort_column' => 'menu_order, post_title',
'link_before' => '',
'link_after' => '',
'exclude_tree'=> '' );
$r = wp_parse_args($args, $defaults);
// exclude_treeが設定されている場合
if ( $r['exclude_tree'] != '' ) {
// 文字列を区切る
$excludes_tree_arrs = explode(",", $r['exclude_tree']);
foreach( $excludes_tree_arrs as $excludes_tree_id ) {
if ( $r['exclude'] != '' ) {
$r['exclude'] .= ','. $excludes_tree_id;
} else {
// excludeが空の場合(最初しか入らないはず)
$r['exclude'] = $excludes_tree_id;
}
// 子のページを取得
$child_pages = get_pages('child_of=' . $excludes_tree_id);
foreach($child_pages as $child_page) {
$r['exclude'] .= ',' . $child_page->ID;
}
}
// 最後にexclude_treeの中身は無くす
$r['exclude_tree'] = '';
}
wp_list_pages( $r );
}
関数説明
動きとしてはexclude_treeの指定したIDから
子ページを全て取得し、全部exclude指定にしてから
wp_list_pagesを呼んでいるだけです。
※使用出来る引数はwp_list_pagesとまったく同じで、
exclude、exclude_treeともに指定していても大丈夫です。
使用方法
- 使用しているテーマのfunction.phpに上をコピー
- テーマ内で使用している「wp_list_pages」を「mee_wp_list_pages」に関数名変更
以上です。
これで、そのテーマ使用中はどんなにバージョンアップしても大丈夫で
exclude_treeを複数指定していても対応されます。