WP_Queryクエリから特定の投稿を1つ除外するにはどうすればよいですか。 (たとえば、ID 278の投稿以外のすべての投稿を表示します)
Post__not_in引数を試しましたが、すべての投稿が削除されるだけです。
どんな助けでも素晴らしいでしょう。
これが私の現在の質問です。
<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query(array(
'post_type' => 'case-study',
'paged' => $paged,
));
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
ありがとう
これは重いと思いますが、元の質問に答えるために、最初のループですべての投稿IDを配列にまとめ、2番目のループから 'post__not_in' を使用して投稿を除外しました。投稿IDの
<?php
$args1 = array('category_name' => 'test-cat-1', 'order' => 'ASC');
$q1 = new WP_query($args);
if($q1->have_posts()) :
$firstPosts = array();
while($q1->have_posts()) : $q1->the_post();
$firstPosts[] = $post->ID; // add post id to array
echo '<div class="item">';
echo "<h2>" . get_the_title() . "</h2>";
echo "</div>";
endwhile;
endif;
/****************************************************************************/
// array of post id's collected in first loop, can now be used as value for the 'post__not_in' parameter in second loops query $args
$args2 = array('post__not_in' => $firstPosts, 'order' => 'ASC' );
$q2 = new WP_query($args2);
if($q2->have_posts()) :
while($q2->have_posts()) : $q2->the_post();
echo '<div class="item">';
echo "<h2>" . get_the_title() . "</h2>";
echo "</div>";
endwhile;
endif;
?>
最初のループは、カテゴリ内のすべての投稿を表示し、投稿IDを配列にまとめます。
2番目のループは、最初のループからの投稿を除くすべての投稿を表示します。
あなたが探しているパラメータはpost__not_in
です(kaiserは彼の答えにタイプミスがあります)。そのため、コードは次のようになります。
<?php
$my_query = new WP_Query(array(
'post__not_in' => array(278),
'post_type' => 'case-study',
'paged' => $paged,
));
while ($my_query->have_posts()) : $my_query->the_post(); endwhile;
post__not_in
引数を配列として定義する必要があります。単一の値でも。そして、グローバルなコア変数を一時的なもので上書きしないでください。
<?php
$query = new WP_Query( array(
'post_type' => 'case-study',
'paged' => $paged,
'post__not_in' => array( 1, ),
) );
if ( $query->have_posts() ) {
while ( $query->have_posts() ) {
$query->the_post();
// do stuff
} // endwhile;
} // endif;
?>
代替コード
<?php
add_action('pre_get_posts', 'exclude_category_posts');
function exclude_category_posts( $query ) {
if($query->is_main_query() && $query->is_home()) {
$query->set('cat', array( -22, -27 ));
}
}
<?php
add_action('pre_get_posts', 'wpsites_remove_posts_from_home_page');
function wpsites_remove_posts_from_home_page( $query ) {
if($query->is_main_query() && $query->is_home()) {
$query->set('category__not_in', array(-1, -11));
}
}