Listarea tuturor articolelor dintr-un tip de postare personalizat după taxonomie

25 sept. 2012, 17:24:45
Vizualizări: 137K
Voturi: 33

Există vreo modalitate prin care pot lista toate articolele dintr-un tip de postare personalizat și să le aranjez după termenii taxonomiei personalizate atașate acestora?

De exemplu:

Termen Taxonomie #1
Tip Postare
Tip Postare
Tip Postare

Termen Taxonomie #2
Tip Postare
Tip Postare

Orice ajutor ar fi foarte apreciat.

Mulțumesc.

0
Toate răspunsurile la întrebare 5
3
68

Încearcă asta

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

Obținem toți termenii unei taxonomii, iterăm prin ei și afișăm un titlu cu link către fiecare articol care aparține acelui termen. Dacă trebuie să reordonați termenii taxonomiei, puteți face acest lucru destul de ușor cu un plugin. Cred că Reorder Taxonomy. Dar fiți atenți că acest plugin adaugă(!) o altă coloană în tabelul dumneavoastră la activare și nu o elimină la dezactivare!

25 sept. 2012 19:10:39
Comentarii

Salut @GhostToast Funcționează excelent, am o întrebare directă, cum pot filtra acest lucru după taxonomie, am tenis, golf, fotbal, volei, acest cod le aduce pe toate împreună cu postările care au taxonomia bifată. Cum pot filtra pentru a afișa doar taxonomia Fotbal cu postările sale.

Rodrigo Zuluaga Rodrigo Zuluaga
7 mar. 2017 16:00:57

@RodrigoZuluaga atunci ar fi o interogare simplă. Elimină $custom_terms și foreach() și definește manual 'terms' cu slug-ul sau orice altceva dorești.

GhostToast GhostToast
7 mar. 2017 20:04:35

Am rezolvat puțin diferit cred, dar codul tău e foarte bun $args = array('post_type' => 'publica', 'tax_query' => array( array( 'taxonomy' => 'comision-publicaciones', 'field' => 'name', 'terms' => array($ter_name) ), ), );

Rodrigo Zuluaga Rodrigo Zuluaga
8 mar. 2017 05:43:41
0

Nu este o soluție deosebit de elegantă, dar poți crea mai multe interogări fiecare pentru termenii specifici și apoi să le afișezi. Sperăm că cineva va veni cu o metodă mai frumoasă de a extrage automat termenii pentru a modifica afișarea/sortarea. Dar aceasta te poate ajuta să începi.

<?php

//Prima Interogare pentru Postări care se potrivesc cu 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 'Toate postările găsite în ' . $term->name;

    while ( have_posts() ) : the_post();
        //Afișează ce dorești
        the_title();
        the_content();
    endwhile;
}

//RESETEAZĂ VARIABILELE INTEROGĂRII
wp_reset_query();

//A Doua Interogare pentru 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 'Toate postările găsite în ' . $term->name;

    while ( have_posts() ) : the_post();
        //Afișează ce dorești
        the_title();
        the_content();
    endwhile;
}
25 sept. 2012 18:55:17
0

Super! Soluția lui GhostOne era exact ceea ce căutam. În situația mea, tipul de post personalizat era 'minining_accidents' și taxonomiile personalizate asociate acestuia erau 'accident-types' care aveau mai mulți termeni sub el. Ideea mea a fost să creez un widget personalizat pentru a afișa lista de postări sub termenii acestor taxonomii personalizate. În testul meu, am obținut exact ceea ce doream. Restul a fost doar finisare. Iată codul meu:

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

Da! Există întotdeauna posibilitatea de a îmbunătăți codul în continuare.

10 iul. 2014 15:16:29
1

Aceasta este o soluție mai lungă pe care am încercat-o înainte de a ajunge la acest subiect. Sper că poate ajuta pe cineva să înțeleagă mai bine.

        <?php
    // Obține lista tuturor termenilor de taxonomie -- În titluri simple de categorii
    $args = array(
                'taxonomy' => 'project_category',
                'orderby' => 'name',
                'order'   => 'ASC'
            );
    $cats = get_categories($args);

    // Pentru fiecare Termen al taxonomiei personalizate, obține postările după term_id
    foreach($cats as $cat) {
        ?>
        <a href="<?php echo get_category_link( $cat->term_id ) ?>">
            <?php echo $cat->name; ?> <br>
            <?php // echo $cat->term_id; ?> <br>
        </a>


            <?php
                // Argumente pentru interogare
                $args = array(
                    'post_type' => 'portfolio', // tipul de postare
                    'tax_query' => array(
                        array(
                            'taxonomy' => 'project_category', // vocabularul personalizat
                            'field'    => 'term_id',          // term_id, slug sau name (Definește după ce vrei să cauți termenul de mai jos)    
                            'terms'    => $cat->term_id,      // furnizează slug-urile termenilor
                        ),
                    ),
                );

                // Interogarea
                $the_query = new WP_Query( $args );

                // Bucla
                if ( $the_query->have_posts() ) {
                    echo '<h2> Listă de postări etichetate cu acest termen </h2>';

                    echo '<ul>';
                    $html_list_items = '';
                    while ( $the_query->have_posts() ) {
                        $the_query->the_post();
                        $html_list_items .= '<li>';
                        $html_list_items .= '<a href="' . get_permalink() . '">';
                        $html_list_items .= get_the_title();
                        $html_list_items .= '</a>';
                        $html_list_items .= '</li>';
                    }
                    echo $html_list_items;
                    echo '</ul>';

                } else {
                    // nicio postare găsită
                }

                wp_reset_postdata(); // resetează variabila globală $post;

                ?>

    <?php } ?>
14 iun. 2020 15:38:02
Comentarii

Doamne, mulțumesc! Trebuia să încerc asta mai întâi.

Mike Mike
15 sept. 2021 13:29:46
0
-1

Pentru a afișa o listă de postări personalizate dintr-o taxonomie personalizată

$args = array(
    'tax_query' => array(
        array(
            'taxonomy' => 'your-custom-taxonomy', // taxonomia personalizată
            'field' => 'slug', // câmpul folosit pentru filtrare
            'terms' => array( 'your-term' ) // termenii de filtrare
        ),
    ),
    'post_type' => 'your-post-type' // tipul de postare
);
$loop = new WP_Query($args);
     if($loop->have_posts()) {
    $term = $wp_query->queried_object;
     while($loop->have_posts()) : $loop->the_post();
        // Afișează ceea ce dorești      
   echo '<li><a href="'.get_permalink().'">'.get_the_title().'</a></li>';
      endwhile;
}

Titlu

  • Element listă
  • Element listă
  • Element listă
29 iul. 2014 08:58:25