带有自定义分类筛选器的高级搜索表单

时间:2012-08-29 作者:Andrew

我正在尝试构建一个复杂的搜索表单,其中包含多个自定义分类的过滤器、一个搜索词输入和一个针对每页显示的项目数的选择。

该问题之前已发布在Advanced search form with filters for custom taxonomies and custom fields 布雷迪提供的答案是一个很好的起点。

我将尽我最大的努力解释功能,这是页面模板的来源https://gist.github.com/a82329d519c93d35f1f3

基本上,我有“面试”自定义类型和2个分类法“面试类型”和“面试类别”,它们在表单中有过滤器。

实际上有两种不同的表单,都包含搜索过滤器:#search filters(主过滤器)和#type filters(类型过滤器),其中只有3个按钮用于“自定义类型”分类值。

这两种形式都按我所希望的方式工作,但仍存在一些问题:

最大的一个是分页:mytheme\\u page\\u navi函数与WP PageNavi插件相同,这里的问题是,只要我转到第二个页面,我就会丢失所有筛选值,它会显示来自“书面”面试类型的帖子,10篇/页(这是默认值,用于用户第一次到达页面时,尚未选择任何选项)为什么会发生这种情况?

另外,另一个问题是,由于我有两个表单,如果我在主表单中输入一些值,然后从#类型筛选器中选择“面试类型”,则之前的所有筛选器值都将被删除。

最后,如果有人能快速查看一下代码并指出我做错了什么,我将不胜感激。几天来,我一直在想方设法解决这个问题,但运气不好。

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

您丢失过滤器的原因是您通过表单中的POST传递它们。这很好,但您必须以某种方式为分页存储这些值。我相信如果您使用GET,您可以保留“第2页”上的值,但只要转到下一页,任何POST值都会丢失。

您可以将搜索项目存储在会话cookie中,强制下一个分页页面的POST值,或者(我建议)使用GET,搜索筛选器值并不是那么重要。

$next_link = get_permalink();
首先回显get\\u permalink()值,它可能已经保留了当前的参数。如果没有,请使用add\\u query\\u arg()保留它们。

$next_link = add_query_arg( \'paged\', ((int)$_GET[\'paged\'])+1), $next_link);
// Do this as many times as you need to
$next_link = add_query_arg( \'your_filter\', $_GET[\'your_filter\'], $next_link);
$next_link = add_query_arg( \'your_other_filter\', $_GET[\'your_other_filter\'], $next_link);

结束