最近,我根据基本模板对搜索页面结果进行了样式化,使所有内容都运行得很好。我开发了它来返回假/正标题/正文。如果找到了实际结果,它应该只返回一个肯定的标题,然后肯定的正文应该包含这些结果,否则,它应该返回其中两个结果的错误版本。然而,有些查询(应该是搜索结果)会以某种方式返回一个“正面”标题,无论出于何种原因,返回一个“负面”正文(告诉用户没有搜索结果)。奇怪的是,我测试了其他单词,这些单词按照它们应该的方式运行,并返回了正确的假/阳性响应。你可以去看看here.
在我的网站上,你可以尝试搜索类似于“短代码”的内容,并返回一个正面标题,该标题表示“搜索结果:短代码”,然后将列出找到的结果,而如果你搜索类似于“搜索”的内容,它将返回有帖子的正面标题,但不会呈现任何帖子,而是渲染出负体,它告诉您没有搜索结果。(尽管我最近发表了一篇关于“搜索”的帖子……这令人困惑。
我的搜索。php是:
<?php
/**
* The template for displaying Search Results pages.
*
* @package League Of Legends: Rift
*/
get_header();
if ( have_posts() && $pco_rift[\'opt-search-sidebar\'][\'2\'] || !have_posts() && $pco_rift[\'opt-search-sidebar\'][\'1\']){
$sidebar_active = true;
}
?>
<?php if ( have_posts() ) : ?>
<?php if ( have_posts() ) : the_post(); ?>
<header class="page-header search-header search-success">
<h1 class="page-title"><?php printf( __( \'<i class="fa fa-search"></i> Search Results for: %s\', \'league-of-legends-rift\' ), \'<span>\' . get_search_query() . \'</span>\' ); ?></h1>
</header><!-- .page-header -->
<?php endif; ?>
<?php else : ?>
<header class="page-header search-header search-fail">
<h1 class="page-title"><?php _e(\'Nothing Found\', \'league-of-legends-rift\')?></h1>
</header>
<?php endif; ?>
<section id="primary" class="content-area">
<main id="main" class="site-main" <?php if(!$sidebar_active){ echo \'style="margin: 0" \'; } ?>role="main">
<?php if ( have_posts() ) : ?>
<?php /* Start the Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
<?php
/**
* Run the loop for the search to output the results.
* If you want to overload this in a child theme then include a file
* called content-search.php and that will be used instead.
*/
get_template_part( \'content\', \'search\' );
?>
<?php endwhile; ?>
<?php league_of_legends_rift_paging_nav(); ?>
<?php else : ?>
<h4><?php _e( \'Sorry, but nothing matched your search terms. Please try again with some different keywords.\', \'league-of-legends-rift\' ); ?></h4>
<?php get_search_form(); ?>
<?php endif; ?>
</main><!-- #main -->
</section><!-- #primary -->
<?php
if($sidebar_active){
get_sidebar();
}
get_footer();
?>
我在顶部设置了一个侧栏活动的东西,如果没有搜索结果,它将不会呈现侧栏(因为这段代码将呈现一个很长的搜索栏,我不想导致侧栏中的搜索栏重复)。
有趣的是,我的其他随机查询(如“gaspdiojfapsoidfjasdf”)将正确返回所有内容(负头,负体)。
谢谢,亚当
最合适的回答,由SO网友:vancoder 整理而成
嗯,我不确定,但你使用have_posts
可能有问题。
请注意,codex声明“作为一种副作用,have\\u posts启动、逐步完成或重置循环。”。
在您的代码中处于高位
<?php if ( have_posts() ) : ?>
<?php if ( have_posts() ) : the_post(); ?>
这可能会干扰循环,导致意外结果。
EDIT
我认为“短代码”(在您的示例中)的结果是“正确的”,因为“短代码”得到了多次点击。”然而,“搜索”只有一次命中,并且该命中正在你的标题中循环,然后循环就结束了。
因此,运行后需要重置循环have_posts()
, 具有rewind_posts()
.