webentwicklung-frage-antwort-db.com.de

Wie bekomme ich mit WP_Query Beiträge aus zwei Kategorien?

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?

5
user3205234

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 Parameter showposts).

4
Mayeenul Islam

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.

0
s_ha_dum