特定のタグを持つカテゴリから投稿をクエリする方法例えば、私が " localhost/tag/tutorial "にアクセスした場合、アーカイブページにはすべてのカテゴリからのすべての投稿がチュートリアルタグ付きで表示されます。
しかし、見解はカテゴリーによって分けられます。例えば:
カテゴリー1
カテゴリー2
注意:投稿は各カテゴリで同じタグで表示されます。
各カテゴリの最新の投稿を表示するコードがあります。
<?php
$categories = get_categories();
foreach($categories as $category) { ?>
<div class="CategoryPost">
<h2><?php echo $category->name; ?></h2>
<ul>
<?php
$post_args = array(
'category' => $category->term_id,
'numberposts' => 9999,
'orderby'=> 'post_date',
'order' => 'ASC',
'post_type' => 'post'
);
$posts = get_posts($post_args);
foreach($posts as $post) { ?>
<li id="post-<?php the_ID(); ?>"><span><?php the_time('d M Y') ?></span> <i class="Seperate">»</i> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php } ?>
</ul>
</div>
<?php }
wp_reset_postdata(); ?>
上記のコードは、この外観で各カテゴリの最新の投稿を表示します。
カテゴリ1の名前
カテゴリ2の名前
カテゴリ3の名前
そのテンプレートで動作するタグアーカイブを作成したいと思います。投稿に同じタグが付いていても、投稿は各カテゴリに表示されます。
これは、タグアーカイブページのカテゴリ投稿を取得するのに役立ちます。お知らせ下さい。
<?php
$current_tag = single_tag_title( $prefix = '', $display = false );
$categories = get_categories( array('hide_empty' => TRUE) );
foreach($categories as $category) { ?>
<?php
$args=array(
'posts_per_page' => -1,
'tag' => $current_tag,
'cat' => $category->term_id,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
?>
<div class="CategoryPost">
<h2><?php echo "Tag: " . $current_tag; ?></h2>
<h2><?php echo "Category: " . $category->name; ?></h2>
<ul>
<?php
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>Post title: ' . get_the_title() . '</li>';
}
echo '</ul></ul></div><br>';
}
?>
<?php }
wp_reset_postdata();
これを試して、それが役立つかどうか私に知らせてください。
<?php
$categories = get_categories( array('hide_empty' => TRUE) );
foreach($categories as $category) { ?>
<?php
$args=array(
'posts_per_page' => -1,
'tag' => 'tutorial',
'cat' => $category->term_id,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
?>
<div class="CategoryPost">
<h2><?php echo $category->name; ?></h2>
<ul>
<?php
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul></ul></div>';
}
?>
<?php }
wp_reset_postdata(); ?>
P.S記事のタイトルを印刷したところです。これがうまくいくならば、印刷するために他のパラメータも追加してください。
ありがとう
編集:すべてのタグを表示します。
<?php
$tags_array = get_tags();
$categories = get_categories( array('hide_empty' => TRUE) );
foreach($tags_array as $tag){
foreach($categories as $category) { ?>
<?php
$args=array(
'posts_per_page' => -1,
'tag_id' => $tag->term_id,
'cat' => $category->term_id,
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
?>
<div class="CategoryPost">
<h2><?php echo "Tag: " . $tag->name; ?></h2>
<h2><?php echo "Category: " . $category->name; ?></h2>
<ul>
<?php
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>Post title: ' . get_the_title() . '</li>';
}
echo '</ul></ul></div><br>';
}
?>
<?php } }
wp_reset_postdata(); ?>
@GaroPpoここに、私があなたに提案した調整されたコードがあります。これがあなたの要求を満たすことを願っています。
<?php
$tag_id = array(12, 13, 14);
$taxonomy = 'testimonial-category';
$postType = 'testimonial';
$terms = get_terms(['taxonomy' => $taxonomy, 'orderby' => 'term_id', 'hide_empty' => true]);
?> <div class="add-accordion"> <?php
foreach($terms as $term){
if($term->parent == 0){
echo '<h3>' . $term->name . '</h3>';
continue;
} $posts = get_posts(array('post_status' =>'publish','post_type' => $postType, 'tag__in' => $tag_id,
array(
'taxonomy' => $taxonomy,
'field' => 'term_id',
'terms' => $term->term_id,
),));
?>
<div class="add-accordion">
<h3><?php echo $term->name ?></h3>
<div class="add-accordion">
<?php foreach($posts as $post){ ?>
<h3><?php echo $post->post_title ?></h3>
<div class="">
<?php echo get_the_content($post->ID) ?>
</div>
<?php } ?>
</div>
</div>
<?php
}
?>