wake-up-neo.net

Beiträge nach benutzerdefiniertem Taxonomienamen sortieren

Ist es möglich, Beiträge (benutzerdefinierter Beitragstyp) nach Kategorie/Taxonomie zu sortieren (Name, absteigend)?

Zum Beispiel würde meine Kategorien sein

  • Saison 2012
    • irgendein Beitrag
    • irgendein Beitrag
    • irgendein Beitrag
  • Saison 2011
    • irgendein Beitrag
    • irgendein Beitrag
    • irgendein Beitrag
  • Jahreszeit 2010
  • usw..
1
Iladarsda

Eine Lösung wäre

$terms = get_terms('taxonomy-name');
foreach($terms as $term) {
    $posts = get_posts(array(
            'post_type' => 'custom_post_type_name',
            'tax_query' => array(
                array(
                    'taxonomy' => 'taxonomy-name',
                    'field' => 'slug',
                    'terms' => $term->slug
                )
            ),
            'numberposts' => -1
        ));
    foreach($posts as $post) {
        // do what you want to do with the posts here
    }
}
9
Mridul Aggarwal

Ich weiß, dass dies eine alte Frage ist, die bereits eine gute Antwort hat, aber ich hatte heute stundenlang mit etwas sehr Ähnlichem zu kämpfen und fand eine alternative Schleife.

Sie können Mriduls (ausgezeichnete) Lösung auch ein wenig anpassen, wenn Sie diese Funktion auf der Archivseite für eine Taxonomie verwenden möchten. Mit anderen Worten, mit dieser Lösung können Sie ein benutzerdefiniertes Taxonomiearchiv nach einer anderen Taxonomie sortieren.

Ich teile dies, weil ich heute vier Stunden lang mit diesem Problem zu kämpfen hatte und wenn jemand anderes versucht, benutzerdefinierte Taxonomie-Archive zu erstellen, die nach einer anderen Taxonomie sortiert sind, gehen Sie folgendermaßen vor. (Dies ist auch meine erste Antwort auf StackExchange - bitte sei nett! :))

Dies beginnt genau wie die Lösung von Mridul. Fragen Sie die Taxonomie ab, nach der Sie Ihre Beiträge sortieren möchten.

$terms = get_terms( array(
    'taxonomy' => 'custom_taxonomy_one',
    'parent' => 0, // This helped me eliminate repetitive taxonomies; you may want to skip this
) );

foreach($terms as $term) {
    echo '<h2>' . $term->name . '</h2>'; // Echo the name of the term

Hier wird es ein bisschen anders als bei Mriduls Antwort. Sie möchten zwei Taxonomien abfragen und sicherstellen, dass die Beziehung zwischen ihnen auf "UND" festgelegt ist. Dies bedeutet, dass die aufgelisteten Posts die Kriterien für beide Taxonomien erfüllen.

In diesem Fall müssen die Posts in "custom_post_type" mit dem Slug des ersten Terms und dem Namen eines anderen übereinstimmen. Hoffentlich macht der Code für alle Sinn!

    $posts = get_posts(array(
            'post_type' => 'custom_post_type', // Get posts from custom post type
            'tax_query' => array(
                'relation' => 'AND', // posts must match both taxonomies
                array(
                    'taxonomy' => 'custom_taxonomy_one',
                    'field' => 'slug',
                    'terms' => $term->slug // match the slug for the term in the previous array
                ),
                array(
                    'taxonomy' => 'custom_taxonomy_two',
                    'field' => 'slug',
                    'terms' => 'custom_taxonomy_two_term_name'
                )
            ),
            'numberposts' => -1
        ));
    foreach($posts as $post) {
       // Do Yo Thang
    }
}
1
nathan_393

Alternative Schleife, in der tax = category und benutzerdefinierter post type = "results"

$args = array( 'taxonomy' => 'category' );
$terms = get_terms( 'category', $args);

//START FOR EACH LOOP
foreach ($terms as $term) {

            $post_type = 'results';
            $tax = 'category';
            $tax_terms = get_terms( $tax );
            if ($tax_terms) {
                foreach ($tax_terms  as $tax_term) {
                $args = array(
                    'post_type' => $post_type,
                    "$tax" => $tax_term->slug,
                    'post_status' => 'publish',
                    'posts_per_page' => -1,
                    'caller_get_posts'=> 1
                );



                $my_query = null;
                $my_query = new WP_Query($args);

                if( $my_query->have_posts() ) : ?>

                        // WHILE
                        <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>

                        // Do stuff

                        <?php endwhile; ?>
                        // END WHILE


                <?php else : ?>
    <?php endif; wp_reset_query(); ?>

}
// END FOR EACH LOOP
0
Iladarsda