我在WordPress安装中使用以下表单作为高级搜索页面的一部分。
<form action="/advanced-search/" method="get">
表单工作正常,但生成的网址如下:
/advanced-search/page/3/?act=s&f=cichlidae&g&s&c&r&tmin&tmax&hmin&hmax&pHmin&pHmax&cmin&cmax&sF&sM&aL&aD&aH
有没有办法阻止表单发送那些空变量?在上面的示例中,仅搜索f
(值cichlidae
)。因此我更喜欢它生成这样的URL:
/advanced-search/?act=s&f=cichlidae
(如有必要,加上/page/3/
。)
我无法使用$_POST
因为我无法使用WordPress paged
变量来处理$_POST
值。
提前致谢,
答案 0 :(得分:2)
为什么不使用jQuery的serialize
方法收集字符串中的所有表单值?
$('form').submit(function() {
var string = $(this).serialize();
window.location.href = '/advanced-search/'+string;
});
它循环遍历所有表单元素,收集它们的值并将其转换为可读的字符串格式,以便在URL中使用。
答案 1 :(得分:1)
不是内置于表单,否 - 如果该字段存在,则会被发送。
您可以使用Javascript来提交表单,从而省略空字段。
答案 2 :(得分:1)
不,没有办法(没有JavaScript)。如果有,这将是浏览器特定的,因为它是决定如何处理表单数据的浏览器。
另外,这个:
foo.php?a=
......而且这个:
foo.php
...在语义上是不同的。在前者中,a
传递的是空字符串(""
),而后者a
根本没有传递(null
)。
此外,Wordpress在这里是正确的,因为表单是一个搜索表单,因此它是检索数据,应该使用GET
;而不是创建数据,POST
应该这样做。
更改此方法(不使用JavaScript)的方法是使用网关脚本从网址中删除空参数并重定向。
每个例子:
$newGET = array();
foreach ($_GET as $key => $value) {
if ($value !== '') $newGET[$key] = $value;
}
header('Location: some/url?'.http_build_query($newGET));
exit;