私はしばらくの間これをうまく運ばずに整理しようとしてきたので、誰かが私を正しい方向に向けることができるかもしれません。
reports
というCPTを作成し、その下にreport-locations
とreport-weeks
という2つのカスタム分類を作成しました。 report-weeks
とreport-locations
の両方でreports
のみをクエリするページが必要です。
reports
が各report-weeks
の下にリストされ、その週の下で、彼らはreport-locations
をリストするはずです。どうにかして注文できるようにしたいと思います。
これまでのところ、私は私を近づける次のものを持っていますが、report-locations
を取得してリストするための二次関数に依存しており、したがって、それらはWP_Query
の一部ではないため、それらの投稿を注文することはできません。
<?php
$post_type = 'reports';
$weeks = get_terms( array(
'taxonomy' => 'report-weeks',
'orderby' => 'name',
'order' => 'DESC'
) );
foreach ( $weeks as $week ) :
$cat_query = new WP_Query( array(
'post_type' => $post_type,
'tax_query' => array(
array(
'taxonomy' => $week->taxonomy,
'field' => $week->slug,
'terms' => $week->term_id,
),
),
'posts_per_page' => '-1',
) );
if ( $cat_query->have_posts() ) : ?>
<h2><?php echo $week->name; ?></h2>
<?php while ( $cat_query->have_posts() ) : $cat_query->the_post(); ?>
<article id="<?php echo 'report-' . $post->ID; ?>">
<h3><?php list_custom_taxonomy('report-locations', $post->ID); ?></h3>
<div><?php the_content(); ?></div>
</article>
<?php endwhile; wp_reset_postdata(); ?>
<?php endif; endforeach; ?>
免責事項:それはあまり効率的な解決策ではないでしょうし、私はあなたがこれら2つの分類法に多くの用語を持っていないことを願っています。
さて、免責事項は、私たちは解決策に行くことができます;)そしてここでそれは行きます:
<?php
$post_type = 'reports';
$weeks = get_terms( array(
'taxonomy' => 'report-weeks',
'orderby' => 'name',
'order' => 'DESC'
) );
$locations = get_terms( array(
'taxonomy' => 'report-locations',
'orderby' => 'name',
'order' => 'ASC'
) );
$results = array();
foreach ( $weeks as $week ) {
$week_results = array();
foreach ( $locations as $location ) {
$posts = new WP_Query( array(
'post_type' => $post_type,
'tax_query' => array(
array(
'taxonomy' => $week->taxonomy,
'terms' => $week->term_id,
),
array(
'taxonomy' => $location->taxonomy,
'terms' => $location->term_id,
),
),
'posts_per_page' => '-1',
) );
if ( $posts->have_posts() ) {
$week_results[ $location->term_id ] = $posts;
}
}
if ( ! empty( $week_results ) ) {
$results[$week->term_id] = $week_results;
}
}
foreach ( $weeks as $week ) :
if ( ! array_key_exists( $week->term_id, $results ) ) continue;
?>
<h2><?php echo $week->name ?></h2>
<?php
foreach ( $locations as $location ) :
if ( ! array_key_exists( $location->term_id, $results[$week->term_id] ) ) continue;
$query = $results[$week->term_id][$location->term];
?>
<h3><?php echo $location->name; ?></h3>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<h4><?php the_title(); ?></h4>
<div><?php the_content(); ?></div>
<?php endwhile; ?>
<?php endforeach; ?>
<?php
endforeach;
wp_reset_postdata();
?>
それで、我々はそこで何をしますか?まず、毎週、すべての場所を繰り返し、すべてのペアに対してWP_Query
を準備します。これにより、投稿が割り当てられていないペアを省略できます。
これらのクエリを準備した後、結果を出力することができます。そのため、もう一度繰り返して、指定されたペアに割り当てられている投稿を印刷する必要があります。