Cum să afișezi postări înrudite după categorie sau tip de postare personalizat?
Caut cea mai bună metodă pentru a crea, probabil, un tip de postare personalizat unde poți filtra în sidebar categoriile asociate acelui custom post type.
Iată site-ul la care lucrez acum. Inițial, profilele de studenți și donatori ar trebui să fie un fel de postare sau categorie care poate fi actualizată dinamic când se creează un profil nou. De exemplu, Health & Science, Student Success și Creative community au propriile seturi de profile specifice.
Să presupunem că John Doe este un nou profil de student pentru Student Success. Pot să îl etichetez să apară doar pe acea pagină, dar când vizualizez postarea lui individuală, am probleme cu afișarea categoriilor sau a profilor înrudite, în acest caz Student Success. Deci când vizualizezi profilul lui John Doe, celelalte profile din Student Success ar trebui listate în sidebar.
Am observat că WordPress folosește același fișier template single.php, așa că sidebar-ul pe care îl am pentru single.php este folosit și pentru profile, ceea ce nu vrem.
În general, dacă navighezi prin Health & Science, Student Success și Creative community, caut o configurare similară, dar în loc de un proces în 4 pași pe care clientul trebuie să îl facă la încărcarea unui nou profil, vreau doar un singur pas.
Configurația mea actuală este să adaug noul profil ca pagină, apoi să merg în zona de meniu din dashboard și să adaug noul profil în meniu.
<?php
// Obține postări înrudite din aceeași categorie
$related = get_posts( array(
'category__in' => wp_get_post_categories($post->ID),
'numberposts' => 5,
'post_type' => 'news',
'post__not_in' => array($post->ID)
) );
if( $related ) foreach( $related as $post ) {
setup_postdata($post); ?>
<li>
<?php the_post_thumbnail('thumbnail', array('alt' => 'Miniatură articol înrudit', 'title' => get_the_title())); ?>
<a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a>
</li>
<?php }
wp_reset_postdata(); ?>

Mai întâi trebuie să faci o interogare cu o taxonomie personalizată sau orice altceva dorești pentru a afișa articolele tale
function related_posts_by_taxonomy( $post_id, $taxonomy, $args=array() ) {
$query = new WP_Query();
$terms = wp_get_object_terms( $post_id, $taxonomy );
// Asigură-te că avem termeni din articolul curent
if ( count( $terms ) ) {
$post_ids = get_objects_in_term( $terms[0]->term_id, $taxonomy );
$post = get_post( $post_id );
$post_type = get_post_type( $post );
$args = wp_parse_args( $args, array(
'post_type' => $type,
'post__in' => $post_ids,
'taxonomy' => $taxonomy,
'term' => $terms[0]->slug,
) );
$query = new WP_Query( $args );
}
// Returnează rezultatele sub formă de interogare
return $query;
}
Pentru a lista rezultatele poți folosi codul de mai jos
$related = related_posts_by_taxonomy( $post->ID, 'service_category' );
while ( $related->have_posts() ): $related->the_post(); ?>
<li class="folk-grid__col all">
<img class="" data-src="<?php echo get_template_directory_uri(); ?>/images/icons-service/<?php $icon_service = get_post_meta( $post->ID, 'service_options_icons', true ); echo $icon_service; ?>.svg" alt="<?php echo get_the_title( $post->ID ); ?>" src="<?php echo get_template_directory_uri(); ?>/images/icons-service/<?php echo $icon_service; ?>.svg">
<span><a href="<?php echo esc_url( get_permalink( $post->ID ) ); ?>"><?php echo get_the_title( $post->ID ); ?></a></span>
<div>
<a rel="nofollow" class="btn folk-button" style="top: 35%;width: 62%;padding: 10px;" href="<?php echo esc_url( get_permalink( $post->ID ) ); ?>">Cere ofertă</a>
</div>
</li>
endwhile;
