wp_list_pages()でタクソノミー指定を行う
固定ページにタグの機能を追加した場合などで、wp_list_pages()を使ってタグやその他のタクソノミー(カスタム分類)で絞込を行いたい場合、テーマのfunctions.phpに下記のように記載します。
※ 「WordPress › フォーラム » タクソノミーのターム別記事一覧表示」から引用しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
function tax_option_get_pages( $pages, $r ) { if ( isset( $r['taxonomy'] ) && isset( $r['term'] ) && in_array( $r['taxonomy'], get_object_taxonomies( $r['post_type'] ) ) && get_term_by( 'slug', $r['term'], $r['taxonomy'] ) ) { $excludes = array(); foreach ( $pages as $key => $page ) { if ( ! is_object_in_term( $page->ID, $r['taxonomy'], $r['term'] ) ) { unset( $pages[$key] ); if ( is_post_type_hierarchical( $r['post_type'] ) && isset( $r['hide_children'] ) && $r['hide_children'] ) { $children = get_page_children( $page->ID, $pages ); foreach ( $children as $child ) { $excludes[] = $child->ID; } } } } foreach ( $pages as $key => $page ) { if ( in_array( $page->ID, $excludes ) ) { unset( $pages[$key] ); } } } return $pages; } add_filter( 'get_pages', 'tax_option_get_pages', 10, 2 ); |
次に、wp_list_pages()を使用したいところで下記のようにtaxonomy(分類名。タグの場合「post_tag」)とterm(項目名)を指定します。
1 |
wp_list_pages( 'post_type=faq&title_li=&taxonomy=faq_service&term=a&hide_children=true' ); |
備考
- ページリストを出力する
wp_list_pages()
は内部でget_pages()
を使用しており、get_pages()
ではデータ取得後の項目調整のためにget_pages
という同じ名前のフィルタを読み込んでいるため、項目調整のためにフィルタを追加して絞り込みを行う形になります。 get_posts()
とget_pages()
は内部でやっていることが違うため、get_posts()
で使えるようなtaxonomy指定が標準のget_pages()
にはありません。