Sortare articole după numele taxonomiei personalizate

15 oct. 2012, 21:09:55
Vizualizări: 18.8K
Voturi: 2

Este posibil să sortezi articole (tip personalizat) după categorie/taxonomie (nume, desc)?

De exemplu, categoriile mele ar putea fi:

  • Sezonul 2012
    • un articol
    • un articol
    • un articol
  • Sezonul 2011
    • un articol
    • un articol
    • un articol
  • Sezonul 2010
  • etc..
0
Toate răspunsurile la întrebare 3
4
11

O soluție ar fi-

$terms = get_terms('nume-taxonomie');
foreach($terms as $term) {
    $posts = get_posts(array(
            'post_type' => 'nume_tip_postare_personalizata',
            'tax_query' => array(
                array(
                    'taxonomy' => 'nume-taxonomie',
                    'field' => 'slug',
                    'terms' => $term->slug
                )
            ),
            'numberposts' => -1
        ));
    foreach($posts as $post) {
        // aici poți face ce dorești cu postările
    }
}
15 oct. 2012 21:24:18
Comentarii

Răspuns bun, dar ar trebui să fii atent la indentare ;)

kovshenin kovshenin
15 oct. 2012 21:59:06

Ai dreptate, voi fi mai atent pe viitor. Am editat răspunsul de mai sus

Mridul Aggarwal Mridul Aggarwal
15 oct. 2012 22:07:11

Există vreo metodă să ordonez foreach $term->name, DESC?

Iladarsda Iladarsda
15 oct. 2012 22:11:32

da, există. Schimbă prima linie în- $terms = get_terms('taxonomy-name', array('order' => 'DESC')); Verifică această pagină din codex pentru referință completă- http://codex.wordpress.org/Function_Reference/get_terms

Mridul Aggarwal Mridul Aggarwal
15 oct. 2012 22:17:00
0

Știu că aceasta este o întrebare veche care are deja un răspuns excelent, dar am avut probleme cu ceva foarte asemănător timp de ore întregi astăzi și am venit cu o alternativă la loop.

De asemenea, puteți personaliza puțin soluția lui Mridul (care este excelentă) dacă doriți să faceți acest lucru funcțional pe pagina de arhivă pentru o taxonomie. Cu alte cuvinte, puteți sorta o arhivă de taxonomie personalizată după o altă taxonomie folosind această soluție.

Împărtășesc acest lucru pentru că am petrecut patru ore luptându-mă cu această problemă astăzi, iar dacă cineva încearcă să creeze arhive de taxonomii personalizate sortate după o taxonomie diferită, acesta este modul în care o faceți. (De asemenea, acesta este primul meu răspuns pe StackExchange — vă rog să fiți blânzi! :) )

Acest lucru începe exact ca soluția lui Mridul. Interogați taxonomia după care doriți să sortați postările.

$terms = get_terms( array(
    'taxonomy' => 'custom_taxonomy_one',
    'parent' => 0, // Acest lucru m-a ajutat să elimin taxonomii repetitive; s-ar putea să doriți să omiteți acest lucru
) );

foreach($terms as $term) {
    echo '<h2>' . $term->name . '</h2>'; // Afișează numele termenului

Aici lucrurile devin puțin diferite față de răspunsul lui Mridul. Doriți să interogați două taxonomii și să vă asigurați că relația dintre ele este setată să fie "AND", ceea ce înseamnă că postările listate îndeplinesc criteriile de a fi în ambele taxonomii.

În acest caz, postările din "custom_post_type" trebuie să corespundă slug-ului primului termen și numelui altuia. Sper că codul are sens pentru toată lumea!

    $posts = get_posts(array(
            'post_type' => 'custom_post_type', // Obține postări din tipul de postare personalizat
            'tax_query' => array(
                'relation' => 'AND', // postările trebuie să se potrivească cu ambele taxonomii
                array(
                    'taxonomy' => 'custom_taxonomy_one',
                    'field' => 'slug',
                    'terms' => $term->slug // se potrivește cu slug-ul termenului din array-ul anterior
                ),
                array(
                    'taxonomy' => 'custom_taxonomy_two',
                    'field' => 'slug',
                    'terms' => 'custom_taxonomy_two_term_name'
                )
            ),
            'numberposts' => -1
        ));
    foreach($posts as $post) {
       // Fă-ți treaba
    }
}
13 aug. 2016 03:33:43
1

Buclă alternativă, unde tax = category și tipul de postare personalizat post type = "results"

// Definim argumentele pentru taxonomie
$args = array( 'taxonomy' => 'category' );
$terms = get_terms( 'category', $args);

// ÎNCEPE BUCLA FOREACH
foreach ($terms as $term) {

            $post_type = 'results'; // Tipul de postare
            $tax = 'category'; // Taxonomia
            $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', // Doar articole publicate
                    'posts_per_page' => -1, // Toate articolele
                    'caller_get_posts'=> 1
                );



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

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

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

                        // Adaugă conținut aici

                        <?php endwhile; ?>
                        // SFÂRȘIT BUCLA WHILE


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

}
// SFÂRȘIT BUCLA FOREACH
15 oct. 2012 21:45:48
Comentarii

"caller_get_posts" este învechit, apropo. Folosește "ignore_sticky_posts" Sursă - http://codex.wordpress.org/Class_Reference/WP_Query#Sticky_Post_Parameters

Mridul Aggarwal Mridul Aggarwal
15 oct. 2012 22:02:15