我有一个模板,其中有一个主要的最新特色帖子(标记为特色),然后还有8个以下。
在主页上,我能够查询最新的精选帖子,然后将其ID传递给pre_get_posts
wordpress过滤器中的函数。它在那里很棒
function mh_exclude_featured_query( $query ) {
if(is_home()){
if ( $query->is_home() ) {
$feat = get_featured_post();
$query->query_vars['post__not_in'] = array($feat->ID);
}
}
}
add_action( 'pre_get_posts', 'mh_exclude_featured_query' );
但我也尝试在category.php中做同样的事情,在那里我将显示标记为该类别的特色的最新帖子。然后将下面的其余帖子排除在特色帖子之外。
不幸的是,当我使用pre_get_posts
过滤器尝试与上述相同的方法时,我陷入无限循环并且内存耗尽。
if($query->is_category() && $query->is_main_query()){
$cur_cat_id = get_cat_id( single_cat_title("",false) );
$feat = get_featured_post($cur_cat_id);
$query->query_vars['post__not_in'] = array($feat->ID);
}
不确定我做的不同会导致内存耗尽。 category.php和index.php的结构几乎相同。
答案 0 :(得分:1)
使用pre_get_posts
过滤器:
<?php
function excludePostId($query) {
$postIds = array(
24, 10
);
if (is_category() && is_main_query()) {
set_query_var('post__not_in', $postIds);
}
}
add_action('pre_get_posts', 'excludePostId');
is_category()
会接受类别slug或ID。您可以限制帖子将被排除在哪些类别之外。
答案 1 :(得分:1)
添加此代码
<?php if(!is_category('category_id')){
echo 'Your Code Here';
}?>