你不需要!只要稍微了解一下URL和查询变量的工作原理,我们就可以完全在页面的URL中完成这项工作,而无需额外的PHP代码
首先,我们有一个URL:
example.com/abc/123
然后我们有一个重写规则。该规则有一个与URL匹配的regex模式,第二个位表示所有匹配的位都是go,例如。
"/abc/(.+)" -> "index.php?p=$match[1]"
这将提供转换
/abc/123
进入
index.php?p=123
, 成为
WP_Query( array( \'p\' => 123 ) )
. WordPress然后查看新的
WP_Query
, 使其成为主查询(post循环),并执行一些逻辑来决定加载哪个模板。在这种情况下,它会看到
p
并宣布这是
singular
页码,so
single.php
可能会加载。有关这方面的更多详细信息,请参阅模板层次结构。
重要的是,我们可以传递额外的参数!/abc/123
匹配,但也匹配/abc/123?s=test
. 这导致index.php?p=123&s=test
, 和WP_Query( array( \'p\' => 123, \'s\' => \'test\'))
.
自从s
是搜索查询参数,我们可以使用这些新发现的知识来做您需要的事情!
因此,假设您的用户属于tshrit类别,其URL为:
example.com/product-category/tshirts
我们可以使用
example.com/product-category/tshirts?s=test
现在,我们搜索了T恤产品类别中的“测试”。这很好,因为现在我们有了一个URL,它始终是该类别的搜索。我们可以在cookie或会话中跟踪tshirt类别,但这将导致一个URL向不同的人显示多个内容,以及随之而来的所有缓存问题和SEO问题。
我们如何构建搜索表单?
<form action="" method="get">
<input type="text" name="s" value="<?php echo get_search_query(); ?>">
</form>
注意两件事:
文本输入具有名称s
我们要提交当前所在的页面。我们可以使用PHP voodoo来获取当前URL,但我们不需要,所以我们设置action
属性为nothing,并让浏览器处理它。我指定了该值,以便您知道刚才使用get_search_query
这不适用于POST