Listarea tuturor articolelor dintr-un tip de postare personalizat după taxonomie
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.

Î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!

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.

@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.

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

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.

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

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ă
