我在寻找一种干净的方法,按posttype对搜索结果进行分组。我目前有3种帖子类型:页面、帖子和词汇表。经过长时间的搜索this answer 这条线给了我我所需要的。
唯一的问题是,没有检查帖子类型是否没有搜索结果。如果一个帖子类型有0个结果,例如词汇表,它仍然显示帖子类型标题(以及帖子类型周围的容器)。我想要帖子类型li.search-results-post-type-item
被藏在那个箱子里。
我不是在找css/js黑客display: none;
解决方案我无法想象这不能用PHP完成。
提前感谢!
当前情况
Posts
<发布搜索结果1等
Pages
<页面搜索结果1、页面搜索结果2等
Glossary
(空)
理想情况
Posts
<发布搜索结果1等
Pages
<?php
$search_query = new WP_Query(
array(
\'posts_per_page\' => 10,
\'s\' => esc_attr( $_POST[\'keyword\'] ),
\'paged\' => $paged,
\'post_status\' => \'publish\'
)
);
if( $search_query->have_posts() ) : ?>
<div class="search-suggestions-list-header">
<?php echo $search_query->found_posts.\' results found\'; ?>
</div>
<ul class="search-results-list">
<?php
$types = array( \'post\', \'page\', \'glossary\' );
foreach( $types as $type ) : ?>
<li class="search-results-post-type-item post-type-<?php echo $type ?>">
<header class="post-type-header">
<h5 class="post-type-title">
<?php
$post_type_obj = get_post_type_object( $type );
echo $post_type_obj->labels->name
?>
</h5>
</header>
<ul class="search-results-list">
<?php
while( $search_query->have_posts() ): $search_query->the_post();
if( $type == get_post_type() ) : ?>
<li class="search-results-list-item">
<h4 class="entry-title"><?php the_title();?></h4>
</li>
<?php
endif;
endwhile;
wp_reset_postdata();
?>
</ul>
</li>
<?php endforeach; ?>
</ul>
<?php else:
echo \'<div class="search-suggestions-no-results">
<p>\' . __(\'Sorry, no results found\', \'text-domain\') . \'</p>
</div>\';
endif;