所属する分類用語に割り当てられている投稿が1つだけの場合は、投稿にリダイレクトします。これまでのところ、次のようにしています。
$term_id = get_queried_object()->term_id;
$taxonomy_name = 'product_range';
$term_children = get_term_children( $term_id, $taxonomy_name );
foreach ( $term_children as $child ) {
$term = get_term_by( 'id', $child, $taxonomy_name );
if($term->count <= 1 ) {
echo '<a href="'. get_term_link($child, $taxonomy_name) .'" class="thumb" title="'.$term->name.'">'.$term->name.'</a>';
}
}
これはアーカイブページにリンクしていますが、関連する投稿にユーザーをリダイレクトしたいのですが、パーマリンクを変更して単一の投稿ページに移動するために何をする必要があるのかわかりません。
@クレム私は投稿をクエリしてカウントをチェックするためにWP_Queryを追加することによってこれを理解することができました、これが私のコードです:
$term_id = get_queried_object()->term_id;
$taxonomy_name = 'product_range';
$custom_terms = get_term_children( $term_id, $taxonomy_name );
echo '<div class="row row__condensed">';
foreach($custom_terms as $custom_term) {
$term = get_term_by( 'id', $custom_term, $taxonomy_name );
wp_reset_query();
$args = array(
'post_type' => 'product',
'posts_per_page' => 1,
'tax_query' => array(
array(
'taxonomy' => 'product_range',
'field' => 'slug',
'terms' => $term->slug,
),
),
);
$loop = new WP_Query($args);
if($loop->have_posts()) {
while($loop->have_posts()) : $loop->the_post();
// If only one post exists link to product
if($term->count === 1 ) {
echo '<div class="col-xs-12 col-md-4">';
echo '<div class="grid__item">';
echo '<a href="'.get_permalink().'">';
echo '</a>';
echo '<h3><a href="' . get_permalink() . '">'.$term->name .'</a></h3>';
echo '<p>'.wp_trim_words($term->description, 23, '...').'</p>';
echo '</div>';
echo '</div>';
}
//else link to the listing page
else {
echo '<div class="col-xs-12 col-md-4">';
echo '<div class="grid__item">';
echo '<a href="' . get_term_link( $custom_term, $taxonomy_name ) . '">';
echo '</a>';
echo '<h3><a href="' . get_term_link( $custom_term, $taxonomy_name ) . '">'.$term->name .'</a></h3>';
echo '<p>'.wp_trim_words($term->description, 23, '...').'</p>';
echo '</div>';
echo '</div>';
}
endwhile;
}
else {
echo "no posts found.";
} //endforeach
echo '</div>';
WP_Term
の$count
プロパティを使うことができると思います。
そして、の場合、この用語に1つの投稿しか添付されていないので、この投稿オブジェクトを検索し、それを使って...
$term = get_queried_object();
if ( $term->count === 1 ) {
$args = array(
'tax_query' => array(
array(
'taxonomy' => 'product_range',
'field' => 'term_id',
'terms' => array( $term->term_id ),
'include_children' => false,
),
)
);
$query = new WP_Query( $args );
$posts = $query->posts;
$post = $posts[0];
/**
* IMPORTANT FOR SEO...
* Temporary redirection until your category is populated - Use 301 instead of 302 to redirect permanently...
*/
if ( wp_redirect( get_permalink( $post->ID ), 302 ) ) {
exit;
}
}