暂时存储主搜索结果

时间:2015-05-28 作者:CindyH

我有几种不同的帖子类型,当有人搜索时,它会将所有帖子类型集中在一起,然后我会为用户提供一个下拉选择,以便用户根据不同的帖子类型优化搜索。我决定通过post count自动生成下拉列表,以便只添加有任何结果的部分。我还让每个选项显示该部分中的结果总数,因此我最终得到一个数组,该数组包含帖子名称、显示名称和结果总数,然后我使用该数组构建下拉菜单并显示所选内容等。

这一切都按照我想要的方式进行,只是我有一个问题——当我单击其中一个选择选项来优化搜索时,新查询会覆盖数组,因此我会丢失计数和其他选择项。

我希望下拉列表保留原始查询中的数据,而不是精确查询中的数据。例如,假设我的总搜索结果为50-则下拉列表显示:Show all(50) Pages(20) Blog Posts(15) Glossary Terms(10) Reviews (5), 但如果有人点击博客帖子,其他部分就会消失。

我最初想做的是添加一个search_refer 要优化下拉列表,请将原始结果数组存储在变量中,并执行条件设置,以便仅当search_refer 未优化,则构建下拉列表,否则使用存储在变量中的数组。

我认为这是一个很好的主意,但它不起作用-我尝试将数组存储在一个全局变量中,当页面刷新优化后的搜索结果时,数组显示为NULL。为了测试我的想法是否可行,我将原始数组存储在瞬态中,然后在search_refer 非常精致,效果非常好。

现在我想知道存储阵列是否是最好的方法?如果提交优化搜索的表单使用了不同的查询,可能会这样?我知道我可能把这件事弄得比实际情况更复杂了,而且可能有一种非常简单的方法来做我想做的事情。

如果有必要,我已经在下面的下拉列表中包含了代码-数组只是一个键值对,我检查一个post类型是否至少有一个项,如果有,我将计数与名称连接起来,如下所示:page =>\'Articles (10)\', posts =>\'Blog Posts (5)\', 等

echo \'<form id="types" class="select" method="get" action="\'.$bloginfo.\'">
    <label class="" for="s">\'.$label.\'</label><input type="hidden"   
    value="\'.$searchquery.\'" name="s" id="s" /><select id="post_types" 
    name="post_types" onchange="this.form.submit()">\';

foreach ( $my_array as $key => $val ) {
    if ( $picked === $key  || ( $search_refer == \'gloss\' && $key ==\'glossary\' ) ) {
        echo \'<option value="\' . $key . \'" selected name="post_type">\' . $val . \'</option>\';
    } else {
        echo \'<option value="\' . $key . \'" name="post_type">\' . $val . \'</option>\';
    }
}

echo \'</select><input name="site_section" type="hidden" value="refine" />
    <noscript><input type="submit" id="searchsubmit" value="Go" /></noscript> 
    </form>\';

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

在我看来,你有三个选择:

将全局搜索数据存储在$\\u会话中;如果没有post类型筛选器,我尝试将数组存储在全局变量中,当页面使用优化的搜索结果刷新时,数组显示为NULL。

当然PHP没有前一个请求的“内存”,即the curse of HTTP.

就个人而言,我会选择选项1或2。3是可以的,但在服务器上更为密集-这完全取决于流量级别和您希望处理的并发搜索数量。

结束