Ich versuche, Beiträge mit der Kategorie-ID 4
auszuwählen, aber Beiträge mit der Kategorie-ID 2
auszuschließen.
Hier ist, was ich versuche
$query = new WP_Query(array(
"cat__in" => array(4),
"cat__not_in" => array(2),
"post_type" => "post",
"post_status" => "publish",
"orderby" => "date",
"order" => "DESC",
"posts_per_page" => $limit,
"offset" => 0
));
Es wird jedoch nicht die richtige Auswahl getroffen. Was mache ich falsch?
Wie sich herausstellt, kann dies auf 4 verschiedene Arten erfolgen
Verwenden von cat
mit einer negativen Zahl
$query = new WP_Query(array(
"cat" => "4, -2",
// ...
));
Verwenden von category__in
und category__not_in
Ich habe fälschlicherweise cat__in
und cat__not_in
verwendet, die nicht gültige WP_Query-Parameter sind
$query = new WP_Query(array(
"category__in" => array(4),
"category__not_in" => array(2),
// ...
));
Mit tax_query
$query = new WP_Query(array(
"tax_query" => array(
"relation" => "AND",
array(
"taxonomy" => "category",
"field" => "term_id",
"terms" => array(4)
),
array(
"taxonomy" => "category",
"field" => "term_id",
"terms" => array(2),
"operator" => "NOT IN"
),
),
// ...
));
Verwenden des pre_get_posts
-Filters (wie von Brad Dalton bereitgestellt)
function exclude_posts_from_specific_category($query) {
if ($query->is_home() && $query->is_main_query()) {
$query->set("cat", "-2");
}
}
add_action("pre_get_posts", "exclude_posts_from_specific_category");
Verwenden Sie pre_get_posts
, um die Kategorien auszuschließen, die nicht in der Schleife angezeigt werden sollen.
function exclude_posts_from_specific_category( $query ) {
if ( $query->is_home() && $query->is_main_query() ) {
$query->set( 'cat', '-2' );
}
}
add_action( 'pre_get_posts', 'exclude_posts_from_specific_category' );
Oder erstellen Sie einen neuen WP_Query
und verwenden Sie die Kategorie-Parameter.
<?php
$args = array(
'category__not_in' => 2 ,
'category__in' => 4
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
}
wp_reset_postdata();
Wenn Sie nur Beiträge aus einer Kategorie anzeigen möchten, verwenden Sie das Kategoriearchiv. Siehe Template Hierarchy
.