Listet alle Beiträge in benutzerdefinierten Beitragstypen nach Taxonomie auf


25

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

Beispielsweise;

Taxonmy Punkt # 1
Beitrag Typ
Beitrag Typ
Beitrag Typ

Taxonomie Begriff # 2
Beitragstyp
Beitragstyp

Jede Hilfe wäre sehr dankbar.

Vielen Dank.

Antworten:


51

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. Taxonomie neu ordnen , glaube ich. Beachten Sie jedoch , dass dieses Plugin bei der Aktivierung Ihrer Tabelle eine weitere Spalte hinzufügt (!) Und diese bei der Deaktivierung nicht entfernt !


Hi @GhostToast Das funktioniert super, ich habe eine direkte Frage, wie kann ich das nach Taxonomie filtern? Ich habe Tennis, Golf, Fußball, Volleyball? zeige nur die Fussball Taxonomie mit ihren Beiträgen.
Rodrigo Zuluaga

@ RodrigoZuluaga das wäre dann eine einfache einzelne Abfrage. zum mitnehmen $custom_termsund das foreach()definieren und einfach 'terms'manuell auf die schnecke oder was auch immer du willst.
GhostToast

Ich denke, es ist ein bisschen anders, aber dein Code ist verdammt gut > 'name', 'terms' => array ($ ter_name)),),);
Rodrigo Zuluaga

1

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

0

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.


-1

Anzeigen einer Liste benutzerdefinierter Posts aus einer benutzerdefinierten Taxonomie

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'your-custom-taxonomy',
            'field' => 'slug',
            'terms' => array( 'your-term' )
        ),
    ),
    'post_type' => 'your-post-type'
);
$loop = new WP_Query($args);
     if($loop->have_posts()) {
    $term = $wp_query->queried_object;
     while($loop->have_posts()) : $loop->the_post();
        //Output what you want      
   echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
      endwhile;
}

Titel

  • Listenpunkt
  • Listenpunkt
  • Listenpunkt
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.