对于客户端,我需要按类别对搜索结果页面上的结果进行分组。在这种情况下,它不是帖子,而是pages 从具有Add Tags And Category To Page And Post Types 插件。
这是未编辑的搜索结果页面模板:
<div id="content">
<div id="inner-content" class="wrap cf">
<main id="main" class="m-all t-2of3 d-5of7 cf" role="main">
<h1 class="archive-title"><span><?php _e( \'Search Results for:\', \'bonestheme\' ); ?></span> <?php echo esc_attr(get_search_query()); ?></h1>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<article id="post-<?php the_ID(); ?>" <?php post_class(\'cf\'); ?> role="article">
<header class="entry-header article-header">
<h3 class="search-title entry-title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h3>
<p class="byline entry-meta vcard">
<?php printf( __( \'Posted %1$s by %2$s\', \'bonestheme\' ),
/* the time the post was published */
\'<time class="updated entry-time" datetime="\' . get_the_time(\'Y-m-d\') . \'" itemprop="datePublished">\' . get_the_time(get_option(\'date_format\')) . \'</time>\',
/* the author of the post */
\'<span class="by">by</span> <span class="entry-author author" itemprop="author" itemscope itemptype="http://schema.org/Person">\' . get_the_author_link( get_the_author_meta( \'ID\' ) ) . \'</span>\'
); ?>
</p>
</header>
<section class="entry-content">
<?php the_excerpt( \'<span class="read-more">\' . __( \'Read more »\', \'bonestheme\' ) . \'</span>\' ); ?>
</section>
<footer class="article-footer">
<?php if(get_the_category_list(\', \') != \'\'): ?>
<?php printf( __( \'Filed under: %1$s\', \'bonestheme\' ), get_the_category_list(\', \') ); ?>
<?php endif; ?>
<?php the_tags( \'<p class="tags"><span class="tags-title">\' . __( \'Tags:\', \'bonestheme\' ) . \'</span> \', \', \', \'</p>\' ); ?>
</footer> <!-- end article footer -->
</article>
<?php endwhile; ?>
<?php boilerplate_page_navi(); ?>
<?php else : ?>
<article id="post-not-found" class="hentry cf">
<header class="article-header">
<h1><?php _e( \'Sorry, No Results.\', \'bonestheme\' ); ?></h1>
</header>
<section class="entry-content">
<p><?php _e( \'Try your search again.\', \'bonestheme\' ); ?></p>
</section>
<footer class="article-footer">
<p><?php _e( \'This is the error message in the search.php template.\', \'bonestheme\' ); ?></p>
</footer>
</article>
<?php endif; ?>
</main>
<?php get_sidebar(); ?>
</div>
</div>
这就是我如何在一点帮助下走到现在的:
<div id="content">
<div id="inner-content" class="wrap cf">
<main id="main" class="m-all t-2of3 d-5of7 cf" role="main">
<h1 class="archive-title"><span><?php _e( \'Search Results for:\', \'boilerplate\' ); ?></span> <?php echo esc_attr(get_search_query()); ?></h1>
<?php
$list_per_category = [];
$search_filters = array(
\'post_type\' => \'page\' // Doorzoekt alle post types
);
$search_result = new WP_Query( $search_filters );
//var_dump($search_result);
if ($search_result->have_posts()) : while ($search_result->have_posts()) : $search_result->the_post();
//Genereer de html voor het zoekresultaat van de post, en bewaar deze in een buffer
ob_start(); ?>
<article>
<?php // create our link now that the post is setup ?>
<h4 class="search-title entry-title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4>
<?php the_excerpt( \'<span class="read-more">\' . __( \'Read more »\', \'boilerplate\' ) . \'</span>\' ); ?>
</article>
<?php
$post_html = ob_get_clean();
//Loop de hoofdcategorieen van de post door en maak hier een overkoepelende structuur voor aan die we kunnen gebruiken voor de lijstweergave van het zoekresultaat.
$post_categories = get_the_category();
foreach ($post_categories as $post_category) :
if($post_category->parent == 0):
if (!isset($list_per_category[$post_category->term_id])):
$list_per_category[$post_category->term_id][\'category\'] = $post_category;
$list_per_category[$post_category->term_id][\'posts\'] = [];
endif;
$list_per_category[$post_category->term_id][\'posts\'][] = $post_html;
endif;
endforeach;
endwhile;
//Doorloop de gemaakte structuur van posts per category en toon deze
foreach ($list_per_category as $list_item) :
echo \'<div class="category\' . $list_item[\'category\']->slug . \'">
<h2>\' . $list_item[\'category\']->name . \'</h2>\';
foreach ($list_item[\'posts\'] as $post_html) :
echo $post_html;
endforeach;
echo \'</div>\';
endforeach;
else : ?>
<article id="post-not-found" class="hentry cf">
<header class="article-header">
<h1><?php _e( \'Sorry, No Results.\', \'bonestheme\' ); ?></h1>
</header>
<section class="entry-content">
<p><?php _e( \'Try your search again.\', \'bonestheme\' ); ?></p>
</section>
<footer class="article-footer">
<p><?php _e( \'This is the error message in the search.php template.\', \'bonestheme\' ); ?></p>
</footer>
</article>
<?php endif; ?>
</main>
<?php get_sidebar(); ?>
</div>
这里的问题是,列出的所有页面都有一个类别,而不仅仅是有一个类别的搜索结果。循环似乎缺少某种搜索查询参数。我想知道如何改进页面模板,使其按类别显示搜索结果。也许有一个比我上面发布的更简单的方法?
提前感谢!
SO网友:Justin Picard
不幸的是,它还不能解决我的问题。当我在网站上搜索我确信的东西时,我什么也得不到。当没有搜索结果时,将按预期显示“no results”(没有结果)消息。
我只是无法想象我是唯一一个有这个问题的人,但关于这个问题我几乎找不到什么。
这是我现在的代码:`
<div id="inner-content" class="wrap cf">
<main id="main" class="m-all t-2of3 d-5of7 cf" role="main">
<h1 class="archive-title"><span><?php _e( \'Search Results for:\', \'boilerplate\' ); ?></span> <?php echo esc_attr(get_search_query()); ?></h1>
<?php
$keyword = $_GET[\'s\'];
$list_per_category = [];
$search_filters = array(
\'post_type\' => \'page\', // Doorzoekt alle post types
\'s\' => $keyword // show only posts that meet the current search query
);
$search_result = new WP_Query( $search_filters );
//var_dump($search_result);
?>
<?php if ($search_result->have_posts()) : while ($search_result->have_posts()) : $search_result->the_post();
//Genereer de html voor het zoekresultaat van de post, en bewaar deze in een buffer
ob_start(); ?>
<article>
<?php // create our link now that the post is setup ?>
<h4 class="search-title entry-title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></h4>
<?php the_excerpt( \'<span class="read-more">\' . __( \'Read more »\', \'boilerplate\' ) . \'</span>\' ); ?>
</article>
<?php
$post_html = ob_get_clean();
//Loop de hoofdcategorieen van de post door en maak hier een overkoepelende structuur voor aan die we kunnen gebruiken voor de lijstweergave van het zoekresultaat.
$post_categories = get_the_category();
foreach ($post_categories as $post_category) :
if($post_category->parent == 0):
if (!isset($list_per_category[$post_category->term_id])):
$list_per_category[$post_category->term_id][\'category\'] = $post_category;
$list_per_category[$post_category->term_id][\'posts\'] = [];
endif;
$list_per_category[$post_category->term_id][\'posts\'][] = $post_html;
endif;
endforeach;
endwhile;
//Doorloop de gemaakte structuur van posts per category en toon deze
foreach ($list_per_category as $list_item) :
echo \'<div class="category\' . $list_item[\'category\']->slug . \'">
<h2>\' . $list_item[\'category\']->name . \'</h2>\';
foreach ($list_item[\'posts\'] as $post_html) :
echo $post_html;
endforeach;
echo \'</div>\';
endforeach;
else : ?>
<article id="post-not-found" class="hentry cf">
<header class="article-header">
<h1><?php _e( \'Sorry, No Results.\', \'boilerplate\' ); ?></h1>
</header>
<section class="entry-content">
<p><?php _e( \'Try your search again.\', \'boilerplate\' ); ?></p>
</section>
<footer class="article-footer">
<p><?php _e( \'This is the error message in the search.php template.\', \'boilerplate\' ); ?></p>
</footer>
</article>
<?php endif; ?>
</main>
<?php get_sidebar(); ?>
</div>
</div>