Ho una categoria denominata news e molte sottocategorie al suo interno. Quello che voglio fare è ottenere solo 1 post (più recenti) da ciascuna di queste sottocategorie (compresi titolo della categoria, titolo del post, immagine dell'allegato). C'è qualche suggerimento amici ??come faccio a ottenere solo 1 post da ogni categoria in wordpress
risposta
<?php
$news_cat_ID = get_cat_ID('News');
$news_cats = get_categories("parent=$news_cat_ID");
$news_query = new WP_Query;
foreach ($news_cats as $news_cat) :
$news_query->query(array(
'cat' => $news_cat->term_id,
'posts_per_page' => 1,
'no_found_rows' => true,
'ignore_sticky_posts' => true,
));
?>
<h2><?php echo esc_html($news_cat->name) ?></h2>
<?php while ($news_query->have_posts()) : $news_query->the_post() ?>
<div class="post">
<?php the_title() ?>
<!-- do whatever you else you want that you can do in a normal loop -->
</div>
<?php endwhile ?>
<?php endforeach ?>
grazie THEDeadMedic. ha funzionato e puoi aiutarmi un altro. (estendere lo stesso codice) come faccio a mostrare solo quei post che ha allegato l'immagine e ordinati per data – sonill
grazie per questo, cercava esattamente la stessa cosa! +1 – Tarun
Mi ha salvato un sacco di tempo, grazie a @ TheDeadMedic –
Dopo un paio d'ore e grazie ai nostri simili in tutto il mondo, sono stato in grado di modificare la query principale in modo da non abbiamo nemmeno bisogno di andare modelli e generare nuove query e loop ..
// My function to modify the main query object
function grouped_by_taxonomy_main_query($query) {
if ($query->is_home() && $query->is_main_query()) { // Run only on the homepage
$post_ids = array();
$terms = get_terms('formato');
foreach ($terms as $term) {
$post_ids = array_merge($post_ids, get_posts(array(
'posts_per_page' => 4, // as you wish...
'post_type' => 'video', // If needed... Default is posts
'fields' => 'ids', // we only want the ids to use later in 'post__in'
'tax_query' => array(array('taxonomy' => $term->taxonomy, 'field' => 'term_id', 'terms' => $term->term_id,)))) // getting posts in the current term
);
}
$query->query_vars['post_type'] = 'video'; // Again, if needed... Default is posts
$query->query_vars['posts_per_page'] = 16; // If needed...
$query->query_vars['post__in'] = $post_ids; // Filtering with the post ids we've obtained above
$query->query_vars['orderby'] = 'post__in'; // Here we keep the order we generated in the terms loop
$query->query_vars['ignore_sticky_posts'] = 1; // If you dont want your sticky posts to change the order
}
}
// Hook my above function to the pre_get_posts action
add_action('pre_get_posts', 'grouped_by_taxonomy_main_query');
Questa è la tua sesta domanda su SO e non hai ancora accettato alcuna risposta precedente. Per favore fallo se ci sono delle risposte utili, questo migliorerà il tuo karma qui :) – FelipeAls