web-dev-qa-db-ja.com

Wp_list_categoiesからリンクされている一致分類法の用語を表示します。

これは簡単なはずですが、それは私から逃げます。

カスタムの投稿タイプとカスタムの分類法があります。分類法は「asset_type」、スラッグは「type」です。

私はwp_list_categoriesを使ってサイドバーメニューを提供しており、そこではユーザーがクリックしてクリックされた分類法で投稿を見ることができます。

例えば:

<div class="category-sidebar"><?php
            $args = array('post_type' => 'design_asset', 'show_count' => 1, 'taxonomy' => 'asset_type');
            wp_list_categories($args);
            ?>
</div>

これは私の課税条件、例えば "element"をhttp://site.dev/type/element/のリンクと共に正しく表示します。

それはページに行きます、しかし、私は私のループを修正する方法を理解することができないのでそれは現在の用語にマッチする記事だけをこの例では "element"として表示しません。

すべての投稿を表示するための私のループは:

$args = array( 'post_type' => 'design_asset', 'posts_per_page' => 100, 'orderby' => 'title', 'order' => 'ASC'  );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();
4
Steve

スティーブ、あなたは私が見たいくつかの質問をした、そしてあなたのループがあなたの頭痛の全てを引き起こしているという結論に達した。

すべての投稿を表示するための私のループは:

$args = array( 'post_type' => 'design_asset', 'posts_per_page' => 100, 'orderby' => 'title', 'order' => 'ASC'  );
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post();

アーカイブページをカスタムループすると問題が発生します。メインのクエリはこれらのページで非常に特定されており、これらのクエリはカスタムクエリで再現するための断片です。メインクエリがどのように機能し、メインクエリがどこに何を表示するかを決定する方法を理解するには、この質問に対する my answer を確認してください。

私はあなたがどんなアーカイブページ、さらにはホームページ上のあなたの一次ループのためにどんなカスタムクエリを使用することに対してあなたに忠告するであろう。

私のアドバイスは、すべてのテンプレート内のすべてのループをデフォルトのループに戻すことです。

if ( have_posts() ) :
    while ( have_posts() ) : the_post();

       <----LOOP ELEMENTS---->

     endwhile;
 endif;

デフォルトのループに戻った後は、カスタム投稿タイプがメインループに含まれないことを除いて、すべて正常に機能することがわかります。

これを修正するには、pre_get_postsを使用してカスタム投稿タイプとその他の変更をメインクエリに追加します。

function include_cpt( $query ) {
    if ( !is_admin() && $query->is_main_query() ) {
        $query->set( 'post_type', 'design_asset' );
        $query->set( 'posts_per_page', '100' );
        $query->set( 'orderby', 'title' );
        $query->set( 'order', 'ASC' ); 
    }
}
add_action( 'pre_get_posts', 'include_cpt' );

これはすべて正常に動作し、予想通りに動作するはずです。

2
Pieter Goosen

それはページに行きます、しかし、私は私のループを修正する方法を理解することができないのでそれは現在の用語にマッチする記事だけをこの例では "element"として表示しません。

あなたのループのための以下の引数はするべきです:

$args = array(
    'post_type' => 'design_asset',
    'posts_per_page' => 100,
    'orderby' => 'title',
    'order' => 'ASC',
    'tax_query' => array(
        array(
            'taxonomy' => 'asset_type',
            'field' => 'slug',
            'terms' => end( ( explode( '/', rtrim( $_SERVER['REQUEST_URI'], '/' ) ) ) )
        )
    )
);

参考文献:

2
Johannes Pille

あなたは一般的なgremlinに悩まされています:wp_list_categoriesはpost_typeを引数として取りません。 wp_list_categoriesは常にデフォルトのpost_type 'post'のカテゴリへのリンクを生成します。カスタム投稿タイプで区切られたカテゴリを使用したい場合は、関連するパーマリンクを指定する必要があります。これは カスタム投稿タイプアーカイブのためのパーマリンク構造を追加するためのアプローチです

上記の答えは役に立ちます。あなたはあなたのカテゴリーアーカイブにすべての投稿タイプを含めたいです。

0
BigToe