サポート » 使い方全般 » タクソノミーのターム別記事一覧表示

  • 解決済 yukikaze

    (@yukikaze)


    http://ja.forums.wordpress.org/topic/7057?replies=3
    上記の質問で、post_type=faqの表示はできたのですが、

    《したこと》
    カスタム投稿タイプ:FAQ(スラッグ:faq)
    タクソノミー:FAQサービス(スラッグ:faq_service)
    ターム:サービスA(スラッグ:A)
    ターム:サービスB(スラッグ:B)
    ターム:サービスC(スラッグ:C)

    taxonomy-faq_service.php
    を作成。

    中身は下記にしました。

    <ul>
    <?php
    wp_list_pages( 'title_li=&post_type=faq&taxonomy=faq_service&orderby=menu_order&posts_per_page=-1' );
    ?>
    </ul>

    《結果》
    これだと、サイドメニューから各タームをクリックしても post_type=faq に含まれる全ての記事が表示されます。
    taxonomy=faq_service も効いていないようです。
    wp_list_pages では、タクソノミーとタームを指定することができないのでしょうか。

    《したいこと》
    記事のツリー構造を保ったまま、各ターム毎の記事一覧を表示させたい。

    表示方法をご教授いただけますでしょうか。
    よろしくお願いします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター jim912

    (@jim912)

    yukikazeさん、こんにちは。

    wp_list_pagesは、そのままだとタクソノミーの指定などはできません。
    ただし、wp_list_pagesの内部で表示する記事を取得しているget_pagesにフックし、各記事毎にタームに属しているか否かの判別を行い、フィルタリングを行うことで、ツリー構造でのターム毎の記事一覧を表示することは可能です。

    下記のコードをテーマのfunctions.phpに記述すれば、wp_list_pagesでタームでの絞り込みが可能になります。

    指定が必要なパラメータは、taxonomyとterm で、termはslugで指定してください。
    また、階層構造のタクソノミーで、 hide_children をtrueまたは1と指定した場合、親記事がタームに属していない場合、そのページの子孫にあたる記事がタームに属していた場合でも非表示となります。

    ■テーマのfunctions.phpに記述するコード

    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の記述例

    wp_list_pages( 'post_type=faq&title_li=&taxonomy=faq_service&term=a&hide_children=true' );

    トピック投稿者 yukikaze

    (@yukikaze)

    jim912さん こんにちは。

    ご丁寧にありがとうございます。
    どうやって書けば良いかずっと悩んでいましたが、思っていたことが実現できました!
    重ね重ね感謝いたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「タクソノミーのターム別記事一覧表示」には新たに返信することはできません。