Ordinare post per nome della tassonomia personalizzata

15 ott 2012, 21:09:55
Visualizzazioni: 18.8K
Voti: 2

È possibile ordinare i post (custom post type) per categoria/tassonomia (nome, descrizione)?

Ad esempio le mie categorie sarebbero:

  • Stagione 2012
    • qualche post
    • qualche post
    • qualche post
  • Stagione 2011
    • qualche post
    • qualche post
    • qualche post
  • Stagione 2010
  • ecc..
0
Tutte le risposte alla domanda 3
4
11

Una soluzione potrebbe essere:

$terms = get_terms('nome-della-tassonomia');
foreach($terms as $term) {
    $posts = get_posts(array(
            'post_type' => 'nome-del-tipo-di-post-personalizzato',
            'tax_query' => array(
                array(
                    'taxonomy' => 'nome-della-tassonomia',
                    'field' => 'slug',
                    'terms' => $term->slug
                )
            ),
            'numberposts' => -1
        ));
    foreach($posts as $post) {
        // fai quello che vuoi fare con i post qui
    }
}
15 ott 2012 21:24:18
Commenti

Ottima risposta, anche se dovresti fare attenzione all'indentazione ;)

kovshenin kovshenin
15 ott 2012 21:59:06

Hai ragione, in futuro sarò più attento. Ho modificato la risposta sopra

Mridul Aggarwal Mridul Aggarwal
15 ott 2012 22:07:11

C'è un modo per ordinare foreach $term->name, in ordine DESC?

Iladarsda Iladarsda
15 ott 2012 22:11:32

sì, c'è. Cambia la prima riga con- $terms = get_terms('taxonomy-name', array('order' => 'DESC')); Controlla questa pagina del codex per la referenza completa- http://codex.wordpress.org/Function_Reference/get_terms

Mridul Aggarwal Mridul Aggarwal
15 ott 2012 22:17:00
0

So che questa è una domanda vecchia che ha già una risposta eccellente, ma oggi ho faticato per ore con qualcosa di molto simile e ho trovato un loop alternativo.

Puoi anche personalizzare un po' la soluzione (eccellente) di Mridul se vuoi farla funzionare sulla pagina archivio per una tassonomia. In altre parole, puoi ordinare un archivio di tassonomia personalizzata per un'altra tassonomia usando questa soluzione.

Condivido questo perché ho passato quattro ore a lottare con questo problema oggi, e se qualcun altro sta cercando di creare archivi di tassonomie personalizzate ordinati per una tassonomia diversa, ecco come puoi farlo. (Inoltre, questa è la mia prima risposta su StackExchange — siate gentili! :) )

Questo inizia esattamente come la soluzione di Mridul. Interroga la tassonomia per cui vuoi ordinare i tuoi post.

$terms = get_terms( array(
    'taxonomy' => 'custom_taxonomy_one',
    'parent' => 0, // Questo mi ha aiutato a eliminare tassonomie ripetitive; potresti voler saltare questo
) );

foreach($terms as $term) {
    echo '<h2>' . $term->name . '</h2>'; // Mostra il nome del termine

Qui è dove diventa un po' diverso dalla risposta di Mridul. Vuoi interrogare due tassonomie e assicurarti che la relazione tra loro sia impostata come "AND", il che significa che i post elencati soddisfano i criteri di essere in entrambe le tassonomie.

In questo caso, i post in "custom_post_type" devono corrispondere allo slug del primo termine e al nome di un altro. Spero che il codice abbia senso per tutti!

    $posts = get_posts(array(
            'post_type' => 'custom_post_type', // Ottieni i post dal tipo di post personalizzato
            'tax_query' => array(
                'relation' => 'AND', // i post devono corrispondere a entrambe le tassonomie
                array(
                    'taxonomy' => 'custom_taxonomy_one',
                    'field' => 'slug',
                    'terms' => $term->slug // corrisponde allo slug per il termine nell'array precedente
                ),
                array(
                    'taxonomy' => 'custom_taxonomy_two',
                    'field' => 'slug',
                    'terms' => 'custom_taxonomy_two_term_name'
                )
            ),
            'numberposts' => -1
        ));
    foreach($posts as $post) {
       // Fai quello che devi fare
    }
}
13 ago 2016 03:33:43
1

Loop alternativo, dove tax = category e custom post type = "results"

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

//INIZIO CICLO FOR EACH
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(); ?>

                        // Esegui operazioni

                        <?php endwhile; ?>
                        // FINE WHILE


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

}
// FINE CICLO FOR EACH
15 ott 2012 21:45:48
Commenti

"caller_get_posts" è deprecato tra l'altro. Usa "ignore_sticky_posts" Fonte - http://codex.wordpress.org/Class_Reference/WP_Query#Sticky_Post_Parameters

Mridul Aggarwal Mridul Aggarwal
15 ott 2012 22:02:15