web-dev-qa-db-ja.com

カスタム分類テンプレートが単純なループで機能しません。同じ分類法を使用した複数のCPT

私はWPカスタム分類法とカスタム投稿タイプについて助けが必要です。私は今のところ実用的な解決策を見つけることができません。これが簡単な解決策であるならば、私の謝罪を受け入れてください。私は最初にどこでも解決策を見つけるために最善を尽くしました。

問題の説明 -

  1. "department" という分類法があります。
  2. "course"、 "faculty"、 "library" という3つのCPTがあります。

3つのCPTはすべて同じ分類法を使用します "department" 。私はすべてうまくセットアップし、3つのCPTすべてに「部門」分類法を割り当てました。

今、私は "department"タクソノミーterms _ごとに投稿(3つのCPT投稿すべて)を表示しようとしています(たとえば、 "taxonomy" department "には" x "、" y "、" z "という用語があります)。 。 "taxonomy-department.php" というテンプレートファイルがあり、これには単純なループがあります -

<?php if (have_posts()) : ?>

        <ul> 

        <?php while (have_posts()) : the_post(); ?> 
            <li>
                <?php the_title(); ?>
            </li>
        <?php endwhile; ?>

        </ul>
        <?php else : ?>

        <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>

<?php endif; ?>

分類テンプレート内の上記のループは機能しておらず、投稿は表示されていません。他の声明に行きます。これを達成する方法がわかりません。

(あなたの助けを借りて)投稿を正常に取得できた場合、CPTで投稿をフィルタリングすることもできますか(分類テンプレートファイル内)

任意の助けは大歓迎です。

2
Amit

WPはデフォルトでアーカイブ内の通常のネイティブ投稿を表示します。アーカイブに欲しい which 投稿タイプを自動的に拾うことはありません。

それを説明するために、メインクエリを調整する必要があります。

add_action( 'pre_get_posts', function ( WP_Query $query ) {

    if ( $query->is_main_query() && $query->is_tax( 'department' ) ) {
        $query->set( 'post_type', [ 'course', 'faculty', 'library' ] );
    }
} );
1
Rarst

これを試してください -

$post_type = array('course', 'faculty', 'library');
$terms = array( 'x-tax-slug', 'y-tax-slug', 'z-tax-slug' );
$args = array(
    'post_type' => $post_type,
    'tax_query' => array(
        array(
            'taxonomy' => 'department',
            'field'    => 'slug',
            'terms'    => $terms,
        ),
    ),
);
$query = new WP_Query( $args );

<?php if (have_posts()) : ?>

        <ul> 

        <?php while ($query->have_posts()) : $query->the_post(); ?> 
            <li>
                <?php the_title(); ?>
            </li>
        <?php endwhile; ?>

        </ul>
        <?php else : ?>

        <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>

<?php endif; ?>

<?php wp_reset_postdata(); // reset the query ?>

だからここで私たちはあなたのdepartment分類法とそこにカスタム投稿タイプに基づいてカスタムクエリを実行しています。そしてついにクエリをリセットします。

0
CodeMascot

私はその回答への貢献に感謝します。これが最後のコードです -

add_action( 'pre_get_posts', 'my_tax_query' );

function my_tax_query($query){

    if ( !is_admin() && $query->is_main_query() && $query->is_tax( 'department' ) ) {
        $query->set( 'post_type', array( 'course', 'faculty', 'library' ) );
    }
};

コードをfunctions.phpファイル内に配置します。これはあなたが持っているすべての投稿タイプのためにから(用語ページのための)すべての投稿をつかむでしょう。

例えば ​​- あなたの用語ページがhttp://domain-name.com/taxonomy/term1/であるならば、あなたはすべての投稿タイプのために "term1"のためのすべての投稿を得るでしょう。

では、「投稿の種類」で投稿をフィルタリングできますか。それをする方法はありますか?ありがとうございます。

0
Amit