Ich verwende WP_Query, um die Abschnitte "Neueste Beiträge" und "Beliebte Beiträge" auf meiner Startseite zu erstellen. Ich versuche nur 5 Posts aus 2 Kategorien (9 & 11) zu ziehen, aber es werden nur Posts von Cat 9 angezeigt.
Hier ist die PHP-Version, die ich für die letzten Posts verwende.
<ul>
<?php
$cat = array(9,11);
$showposts = 5;
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
'category__in' => $cat,
'showposts' => $showposts,
'paged' => $paged,
'orderby' => 'post_date',
'order' => 'DESC',
'post_status' => 'publish',
);
$the_query = new WP_Query ( $args ); //the query
$i = 0;while ($the_query->have_posts() ) : $the_query->the_post(); //start the loop
?>
<?php
if($i==0){ //Sets the output for the top post
?>
<li class="first-news">
<div class="post-thumbnail"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(350,187); ?></a></div>
<h2 class="post-box-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>
<p class="post-meta"><span class="tie-date"><?php the_time('F jS, Y') ?></span></p>
<div class="entry"><?php the_excerpt(); ?></div>
<div><a class="more-link" href="<?php the_permalink(); ?>">Read More »</a></div>
</li>
<?php
$i++;
} else { ?>
<li class="other-news rar">
<div class="post-thumbnail"><a href="<?php the_permalink(); ?>"><?php the_post_thumbnail(145,93); ?></a></div>
<h3 class="post-box-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<p class="post-meta"><span class="tie-date"><?php the_time('F jS, Y') ?></span></p>
</li>
<?php } endwhile; //end of the loop ?>
<?php wp_reset_postdata(); // reset the query ?>
</ul>
Irgendwelche Vorschläge?
Nach dem Codex :
Beiträge aus mehreren Kategorien anzeigen (Beiträge mit diesen Kategorien unter Verwendung der Kategorie-ID anzeigen) wäre:
$query = new WP_Query( 'cat=9,11' );
Und die Paginierungsparameter des Codex besagen, dass 'showposts'
veraltet ist und durch 'posts_per_page'
ersetzt wird.
posts_per_page
(int) - Anzahl der pro Seite anzuzeigenden Posts (verfügbar mit Version 2.1 , ersetztem Parametershowposts
).
Was Sie fragen, ist fast ein Duplikat dieser Frage: Wie erstelle ich meine eigene verschachtelte meta_query mit posts_where/posts_join?
Das Problem ist, wie @fischi andeutet, mit ziemlicher Sicherheit, dass die Ergebnisse aus der einen oder anderen Kategorie stammen und das Post-Limit erreichen, bevor beide gleichermaßen vertreten sind. Damit dies funktioniert, benötigen Sie eine UNION. WP_Query
kann diese Logik nicht, aber mit Hooks können Sie sie zum Laufen bringen.
$cat = 9; // your first category
$showposts = 5; // actual results are twice this value
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args=array(
'cat' => $cat,
'posts_per_page' => $showposts,
'paged' => $paged,
'orderby' => 'post_date',
'order' => 'DESC',
'post_status' => 'publish',
);
function create_cat_union($clauses) {
remove_filter('posts_request','create_cat_union',1);
$clauses = str_replace('SQL_CALC_FOUND_ROWS','',$clauses,$scfr);
$scfr = (0 < $scfr) ? 'SQL_CALC_FOUND_ROWS' : '';
$pattern = 'wp_term_relationships.term_taxonomy_id IN \(([0-9,]+)\)';
$clause2 = preg_replace('|'.$pattern.'|','wp_term_relationships.term_taxonomy_id IN (11)',$clauses); // manipulate this
return "SELECT {$scfr} u.* FROM (({$clauses}) UNION ({$clause2})) as u";
}
add_filter('posts_request','create_cat_union',1,2);
$the_query = new WP_Query ( $args ); //the query
var_dump($the_query->posts);
Ein paar Anmerkungen: WP_Query
analysiert das Kategorieargument und sucht nach untergeordneten Kategorien, sodass die erste UNION
alle untergeordneten Kategorien der Kategorie 9 enthält. Ihat nicht funktioniertdupliziert diese Logik für Kategorie 11 Wenn Sie diese Funktionalität benötigen, können Sie auf die WP_Query
source verweisen und den Effekt reproduzieren.