我试图在搜索结果页中仅显示帖子。
所以我只是在中添加了下面的代码functions.php
:
function is_type_page() {
global $post;
// Check if the current post is a page.
if ($post->post_type == \'page\') {
return true;
} else {
return false;
}
}
下面的条件
search.php
:
<?php while ( have_posts() ) : the_post(); ?>
<?php if (is_type_page()) continue; ?>
我可以成功地获得帖子,但问题是分页显示不正确,它显示了许多空白页面,似乎仍在查询帖子和页面(只是隐藏页面内容)
我怎样才能解决这个问题?
这是我的代码:
<?php
while (have_posts()):
the_post();
?>
<?php
if (is_type_page())
continue;
?>
<div class="search-result">
<div class="image-content">
<?php
if (has_post_thumbnail()) {
the_post_thumbnail(\'large\');
} else {
?>
<img src="<?php bloginfo(\'template_directory\'); ?>/assets/images/image-not-found.png" />
<?php
}
?>
</div>
<div class="text-content">
<h4 style="">
<?php the_title(); ?>
</h4>
<p>
<?php the_excerpt(); ?>
</p>
</div>
</div>
<?php endwhile; ?>
<!-- PAGINATION here below -->
<div class="nav-previous alignleft">
<?php previous_posts_link(\'Older posts\'); ?>
</div>
<div class="nav-next alignright">
<?php next_posts_link(\'Newer posts\'); ?>
</div>
最合适的回答,由SO网友:Alexander Holsgrove 整理而成
分页工作不正常,因为它假定您要对所有结果分页。您只是在隐藏页面,此时调整分页已经太晚了。
要解决此问题,您需要使用pre_get_posts filter. 例如:
function search_only_posts($query) {
if($query->is_search) {
$query->set(\'post_type\', \'post\');
}
return $query;
}
add_filter(\'pre_get_posts\',\'search_only_posts\');
您可能需要添加各种检查,如
is_admin() 或
is_main_query() 因此,您只需更改站点前端的行为,而不必更改管理区域。