web-dev-qa-db-ja.com

アルファベット順のリストですべてのタグとアウトプットの投稿をループする

私はそれぞれが複数のタグを持っているたくさんの投稿を持っています、そして私はそれらのそれぞれのタグのアルファベット順のリストの下で組織された単一のページにそれらすべてを出力する方法を見つけようとしています。例えば。 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 } ?>
2
Linn

(未テスト)しかし '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

?>
2
Stephen Harris

これが私がカスタム分類法で使った最後のコードです(それは実際にうまくいくように上の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
?>
3
Linn
    $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; 

    }

    }
1
Rajeev Vyas

まずあなたが使ったすべてのタグを取得し、次にそれらを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
}
?>

このコードを試していないが、あなたにアイデアを与えるべきです。必要に応じて追加のチェックを入れてください。

0