wake-up-neo.net

Filtern von Posts, die zu einer bestimmten Kategorie gehören, nur, wenn dies die einzige Kategorie ist

Ich muss Beiträge, die zu einer Kategorie gehören, nur filtern, wenn dies die einzige Kategorie ist. Wenn beispielsweise mein Beitrag A zu cat1 gehört und ich keine Beiträge anzeigen möchte, die zu cat1 gehören, wird Beitrag A nicht angezeigt. Aber wenn Beitrag A zu cat1 und cat2 gehört, wird er angezeigt, da ich cat2 nicht filtern möchte.

Ich habe versucht, so etwas zu machen:

<?php while (have_posts()) : the_post(); ?>

$category_to_exclude = 11;
while ( have_posts() ) : the_post();
$categories = get_the_category();
if( in_array($category_to_exclude, $categories) && count($categories) > 1 ) {
    the_title();
    the_content();
}
endwhile;

aber natürlich funktioniert es nicht richtig, wenn nur Posts "abgeschnitten" werden. Es sollte direkt aus der Abfrage herausgefiltert werden, die zum Abrufen der Beiträge verwendet wurde, aber ich kann diese Abfrage nicht schreiben. Irgendeine Idee?

1
Randomize

Sie benötigen mehr als eine Abfrage, da Sie vor dem Abfragen von Posts wissen müssen, welche Posts ausgeschlossen werden sollen.

Ich persönlich sehe in "Cutoff" nichts Schlimmes. Dieser Code sollte ordnungsgemäß funktionieren:

Update : Bricht die Paginierung ab (siehe Kommentare).

<?php
$category_to_filter = 11;
while ( have_posts() ) : the_post();
    $categories = get_the_category();
    if( in_array($category_to_filter, $categories) && count($categories) > 1 ) {
        the_title();
        the_content();
    }
endwhile;

Update : Der folgende Code unterbricht die Paginierung nicht:

<?php
$category_to_filter = 11;
$posts_in = array();
while ( have_posts() ) : the_post();
    $categories = get_the_category();
    if( in_array($category_to_filter, $categories) && count($categories) > 1 ) {
        $posts_in[] = $post->ID;
    }
endwhile;

$my_query = new WP_Query( array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'post__in' => $posts_in
    )
);

while ( $my_query->have_posts() ) : $my_query->the_post();
    // your template stuff here
endwhile;
wp_reset_query();
2
Max Yudin