我有几种不同的帖子类型,当有人搜索时,它会将所有帖子类型集中在一起,然后我会为用户提供一个下拉选择,以便用户根据不同的帖子类型优化搜索。我决定通过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>\';