WP_Query使用元查询排除帖子



看不懂这个,希望能得到一些帮助!


我有一个"使用两个单独的WP_Query循环。页面顶部的第一个循环包含2个最新的"featured"。职位,由以下条件定义;

$args = array(
'post_type' => 'post',
'orderby' => 'date',
'posts_per_page' => 2,
'meta_query'    => array(
array(
'key'       => 'featured_post',
'value'     => 'yes',
'compare'   => 'LIKE',
),
),
);

"featured_post"键与自定义ACF复选框字段相关。客户端使用它来定义Wordpress后端的特色文章。

现在在第二个WP_Query循环中,使用以下条件显示剩余的帖子;

$args = array(
'post_type' => 'post',
'orderby' => 'date',
'posts_per_page' => -1,
'meta_query'    => array(
array(
'key'       => 'featured_post',
'value'     => 'yes',
'compare'   => 'NOT LIKE',
),
),
);

这基本上排除了第二个循环中的特色帖子。


我的问题是客户并不总是记得取消"特色";添加新帖子时,从旧的特色帖子中删除ACF字段。因此,不再被推荐的旧帖子不会进入第二个循环。

是否有办法在第二个循环中使用meta_query只排除两个最新的特色帖子-而不是所有的?

还是有更好的方法?

我希望这对你有帮助。
首先,
在function.php上创建一个函数:

<?php 
function exclude_featured_post_IDs(){
$featured_post_IDs = array();
$args_featured = array(
'post_type' => 'post',
'orderby' => 'date',
'order'     =>'DESC',
'posts_per_page' => 2,
'meta_query' => array(
array(
'key' => 'featured_post',
'value' => '"yes"',
'compare' => 'LIKE'
),
)
);
$query_featured = new WP_Query($args_featured);
if ($query_featured->have_posts()) :
while ($query_featured->have_posts()) :
$query_featured->the_post();
array_push($featured_post_IDs, get_the_ID());   

?>
<?php

endwhile;
endif;
wp_reset_postdata();
return $featured_post_IDs;

} ?>

,
使用这个参数'post__not_in' =>exclude_featured_post_IDs ()第二个WP_Query循环中的:

<?php 
$args = array(
'post_type' => 'post',
'orderby' => 'date',
**'post__not_in' => exclude_featured_post_IDs(),**
'posts_per_page' => -1,
);
?>

最新更新