私はそれぞれが複数のタグを持っているたくさんの投稿を持っています、そして私はそれらのそれぞれのタグのアルファベット順のリストの下で組織された単一のページにそれらすべてを出力する方法を見つけようとしています。例えば。 Post1にタグA、B、Dがあり、Post2にタグA、C、Dがある場合、出力は次のようになります。
タグA
投稿1
投稿2タグB
投稿1タグC
投稿2タグD
投稿1
投稿2
編集:私はそれがカテゴリで動作するようになったが、それでもタグで動作するようにしたいです。 (除外されたIDはすべて、私が技術的に他の組織のカテゴリーを使用しているためです。)機能コードは次のとおりです。
<?php $cat_args = array(
'orderby' => 'title',
'order' => 'ASC',
'exclude' => '26,27,32,52,36,31,42,38,41'
);
$categories = get_categories($cat_args);
foreach ($categories as $category)
{
$catID = $category->term_id;
$catName = $category->name;
echo '<strong>'.$catName.'</strong>';
global $post; // required
$pArgs = array('category' => $catID,'post_type' => 'shows','orderby' => 'title', 'order' => 'ASC');
$custom_posts = get_posts($pArgs);
foreach($custom_posts as $post) : setup_postdata($post); ?>
<div class="show">
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail("show"); ?>
<h3 class="center"><?php the_title(); ?></h3>
</a>
</div>
<?php endforeach; ?>
<?php } ?>
(未テスト)しかし 'tag'分類法(post_tag
)を含むあらゆる分類法で機能するはずです。次の例では、 'my-taxonomy'という名前の分類法を使用しています。
<?php
//Get terms for this taxonomy - orders by name ASC by default
$terms = get_terms('my-taxonomy');
//Loop through each term
foreach($terms as $term):
//Query posts by term.
$args = array(
'orderby' => 'title', //As requested in comments
'tax_query' => array(
array(
'taxonomy' => 'my-taxonomy',
'field' => 'slug',
'terms' => array($term->slug)
)
));
$tag_query = new WP_Query( $args );
//Does tag have posts?
if($tag_query->have_posts()):
//Display tag title
echo '<h2> Tag :'.esc_html($term->name).'</h2>';
//Loop through posts and display
while($tag_query->have_posts()):$tag_query->the_post();
//Display post info here
endwhile;
endif; //End if $tag_query->have_posts
wp_reset_postdata();
endforeach;//Endforeach $term
?>
これが私がカスタム分類法で使った最後のコードです(それは実際にうまくいくように上のStephenの答えに基づいて編集されました - 私はまだ私の古いコードでカテゴリを問い合わせていただけです):
<?php $terms = get_terms('dates');
foreach($terms as $term):
$args = array(
'orderby' => 'title',
'tax_query' => array(
array(
'taxonomy' => 'dates',
'field' => 'slug',
'terms' => array($term->slug)
)
)
);
$tag_query = new WP_Query( $args );
if($tag_query->have_posts()):
echo '<strong>'.esc_html($term->name).'</strong>';
while($tag_query->have_posts()):$tag_query->the_post(); ?>
<div class="show">
<a href="<?php the_permalink(); ?>">
<?php the_post_thumbnail("show"); ?>
<h3 class="center"><?php the_title(); ?></h3>
</a>
</div><!-- .show -->
<?php endwhile;
endif; //End if $tag_query->have_posts
wp_reset_postdata();
endforeach; //Endforeach $term
?>
$tags = get_tags();
foreach($tags as $tag) {
echo '<strong>'.$tag->name.'</strong>';
$args=array(
‘tag__in’ => array($tag->term_id),
‘showposts’=>5,
‘caller_get_posts’=>1
);
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
while ($my_query->have_posts()) : $my_query->the_post();
.........
endwhile;
}
}
まずあなたが使ったすべてのタグを取得し、次にそれらをWP_Queryに渡してすべての投稿を取得する必要があります。
<?php
$tags = get_tags();
$tag_str = array();
foreach($tags as $tag) {
$tag_str[] = $tag->name;
}
if(!empty($tag_str)){
$tag_str = implode('+', $tag_str);
$my_query = new WP_Query(array('orderby' => 'title', 'order' => 'ASC', $tag => $tag_str));
if($my_query->have_posts()):
while($my_query->have_posts()):$my_query->the_post();
//loop here
endwhile;
endif;
wp_reset_postdata();
} else {
//do something if no tags found
}
?>
このコードを試していないが、あなたにアイデアを与えるべきです。必要に応じて追加のチェックを入れてください。