wake-up-neo.net

Durchlaufen Sie alle Tags und Ausgabepostings in alphabetischer Liste

Ich habe eine Reihe von Posts, die jeweils mehrere Tags haben, und ich versuche, eine Möglichkeit zu finden, alle auf einer einzigen Seite auszugeben, die unter einer alphabetischen Liste der jeweiligen Tags angeordnet ist. Z.B. Wenn Post1 die Tags A, B und D hat und Post2 die Tags A, C und D hat, würde die Ausgabe folgendermaßen aussehen:

Tag A
Post1
Post2

Tag B
Beitrag 1

Tag C
Post2

Tag D
Post1
Post2

BEARBEITEN: Ich habe es mit Kategorien arbeiten lassen, aber ich würde es immer noch lieben, wenn es stattdessen mit Tags funktioniert. (Alle ausgeschlossenen IDs sind, weil ich Kategorien technisch für eine andere Organisation verwende.) Der Funktionscode lautet:

<?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

(Ungetestet) sollte aber mit jeder Taxonomie funktionieren, einschließlich der 'Tag'-Taxonomie (post_tag). Im folgenden Beispiel wird die Taxonomie mit dem Namen "my-taxonomy" verwendet.

<?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

Hier ist der endgültige Code, den ich mit einer benutzerdefinierten Taxonomie verwendet habe (basierend auf der obigen Antwort von Stephen bearbeitet, damit er tatsächlich funktioniert - ich habe mit meinem alten Code immer noch nur Kategorien abgefragt):

<?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

Zuerst müssen Sie alle von Ihnen verwendeten Tags abrufen, diese dann an WP_Query übergeben und alle Posts abrufen.

<?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
}
?>

Habe diesen Code nicht ausprobiert, sollte dir aber eine Idee geben. Platzieren Sie die zusätzlichen Schecks wo immer nötig.

0