it-swarm.com.de

Listet alle Beiträge in benutzerdefinierten Beitragstypen nach Taxonomie auf

Gibt es eine Möglichkeit, alle Posts in einem bestimmten benutzerdefinierten Post-Typ aufzulisten und nach dem ihnen zugeordneten benutzerdefinierten Taxonomiebegriff zu ordnen?

Zum Beispiel;

Taxonmy Term # 1
Post-Typ
Post-Typ
Post-Typ

Taxonomiebegriff # 2
Post-Typ
Post-Typ

Jede Hilfe wäre sehr dankbar.

Vielen Dank.

22
Dean Elliott

Versuche dies

$custom_terms = get_terms('custom_taxonomy');

foreach($custom_terms as $custom_term) {
    wp_reset_query();
    $args = array('post_type' => 'custom_post_type',
        'tax_query' => array(
            array(
                'taxonomy' => 'custom_taxonomy',
                'field' => 'slug',
                'terms' => $custom_term->slug,
            ),
        ),
     );

     $loop = new WP_Query($args);
     if($loop->have_posts()) {
        echo '<h2>'.$custom_term->name.'</h2>';

        while($loop->have_posts()) : $loop->the_post();
            echo '<a href="'.get_permalink().'">'.get_the_title().'</a><br>';
        endwhile;
     }
}

Wir erhalten alle Begriffe einer Taxonomie, durchlaufen sie und lösen einen Titellink zu jedem Beitrag aus, der zu diesem Begriff gehört. Wenn Sie die Taxonomiebedingungen neu anordnen müssen, können Sie dies mit einem Plugin ganz einfach tun. Reorder Taxonomy , ich glaube. Aber Beachten Sie, dass dieses Plugin (!) Eine weitere Spalte zu Ihrer Tabelle in Aktivierung hinzufügt und es bei Deaktivierung nicht entfernt !

47
GhostToast

Keine besonders elegante Lösung, aber Sie können mehrere Abfragen für die jeweiligen Begriffe erstellen und diese dann ausgeben. Hoffentlich kann jemand eine bessere Möglichkeit finden, die Begriffe automatisch abzurufen, um die Ausgabe/Sortierung zu ändern. Aber das würde dich in Schwung bringen.

<?php

//First Query for Posts matching term1
$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'taxonomy_1',
            'field' => 'slug',
            'terms' => array( 'term1' )
        ),
    ),
    'post_type' => 'my-post-type'
);
$query = new WP_Query( $args );

if ( have_posts() ) {

    $term = $query->queried_object;

    echo 'All posts found in ' . $term->name;

    while ( have_posts() ) : the_post();
        //Output what you want
        the_title();
        the_content();
    endwhile;
}

//RESET YOUR QUERY VARS
wp_reset_query();

//Second Query for term2
$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'taxonomy_1',
            'field' => 'slug',
            'terms' => array( 'term2' )
        ),
    ),
    'post_type' => 'my-post-type'
);
$query = new WP_Query( $args );

if ( have_posts() ) {

    $term = $query->queried_object;

    echo 'All posts found in ' . $term->name;

    while ( have_posts() ) : the_post();
        //Output what you want
        the_title();
        the_content();
    endwhile;
}
1
theMojoWill

Schön! GhostOnes Lösung war genau das, wonach ich gesucht hatte. In meiner Situation lautete der benutzerdefinierte Beitragstyp "Minining_Accidents" und die damit verbundenen benutzerdefinierten Taxonomien lauteten "Unfalltypen", die mehrere Begriffe enthielten. Meine Idee war es, ein benutzerdefiniertes Widget zu erstellen, um eine Liste der Beiträge unter Begriffen in diesen benutzerdefinierten Taxonomien anzuzeigen. In meinem Probelauf bekam es, was ich wollte. Rest war aufgefrischt. Hier ist mein Code:

function fn_get_list_of_mining_accident_types()
{
    $custom_taxonomy='accident-types';  
    $custom_terms = get_terms($custom_taxonomy);    
    $str_return='<ul>';
    foreach($custom_terms as $custom_term) 
    {
        wp_reset_query();
        $args = array(
            'post_type' => 'minining_accidents',
            'tax_query' => array(               
                array(
                    'taxonomy' => $custom_taxonomy,
                    'field' => 'slug',
                    'terms' => $custom_term->slug,
                ),
            ),
        );  

        $loop = new WP_Query($args);

        $term_name=$custom_term->name;
        $term_slug=$custom_term->slug;
        $term_link=get_term_link($term_slug, $custom_taxonomy);

        $str_return.='<li><a href="'.$term_link.'">'.$term_name.'</a>';

        if($loop->have_posts()) 
        {
            $str_return.='<ol>';

            while($loop->have_posts()) : $loop->the_post();
                $str_return.='<li><a href="'.get_permalink().'">'.get_the_title().'</a></li> ';
            endwhile;

            $str_return.='</ol>';           
         }
         $str_return.='</li>';
    }
    $str_return.='</ul>';
    return $str_return;
}

Ja! Es gibt immer eine Option, um den Code weiter zu verbessern.

0
Niraj Kumar