搜索页面结果冲突逻辑-搜索结果缓存?

时间:2014-06-27 作者:Adam

最近,我根据基本模板对搜索页面结果进行了样式化,使所有内容都运行得很好。我开发了它来返回假/正标题/正文。如果找到了实际结果,它应该只返回一个肯定的标题,然后肯定的正文应该包含这些结果,否则,它应该返回其中两个结果的错误版本。然而,有些查询(应该是搜索结果)会以某种方式返回一个“正面”标题,无论出于何种原因,返回一个“负面”正文(告诉用户没有搜索结果)。奇怪的是,我测试了其他单词,这些单词按照它们应该的方式运行,并返回了正确的假/阳性响应。你可以去看看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”)将正确返回所有内容(负头,负体)。

谢谢,亚当

1 个回复
最合适的回答,由SO网友:vancoder 整理而成

嗯,我不确定,但你使用have_posts 可能有问题。

请注意,codex声明“作为一种副作用,have\\u posts启动、逐步完成或重置循环。”。

在您的代码中处于高位

<?php if ( have_posts() ) : ?>
    <?php if ( have_posts() ) : the_post(); ?>
这可能会干扰循环,导致意外结果。

EDIT

我认为“短代码”(在您的示例中)的结果是“正确的”,因为“短代码”得到了多次点击。”然而,“搜索”只有一次命中,并且该命中正在你的标题中循环,然后循环就结束了。

因此,运行后需要重置循环have_posts(), 具有rewind_posts().

结束

相关推荐

将php函数添加到.js文件中(用于tinyMCE按钮)

我正在为wp WYSIWYG编辑器创建一个tinyMCE按钮。基本上,当用户单击按钮时,会弹出一个模式表单,他们必须输入几个字段。但是,其中一个字段需要是列出每个帖子类别的列表框,用户将选择一个。其基本语法如下:{ type: \'listbox\', name: \'sds-category\', label: \'Category\', \'values\': [ {text: \'Name Of Cat\', value: \'Cat ID\'}