2

我在我的 WordPress 安装中使用以下表单作为高级搜索页面的一部分。

<form action="/advanced-search/" method="get">

表单工作正常,但生成的 URL 如下:

/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搜索了 (value cichlidae)。因此,我希望它生成这样的 URL:

/advanced-search/?act=s&f=cichlidae/page/3/(如有必要,加上)。

我不能使用$_POST,因为我无法让 WordPresspaged变量使用$_POST值。

提前致谢,

4

3 回答 3

2

为什么不使用 jQuery 的serialize方法来收集字符串中的所有表单值?

$('form').submit(function() {
   var string = $(this).serialize();
   window.location.href = '/advanced-search/'+string;
});

它遍历所有表单元素,收集它们的值并将其转换为可读的字符串格式以供在 URL 中使用。

于 2012-04-08T21:17:33.807 回答
1

不内置到表单中,不 - 如果该字段存在,它将被发送。

您可以改用 Javascript 来提交表单,从而省略空字段。

于 2012-04-08T21:15:00.693 回答
1

不,没有办法(没有 JavaScript)。如果有,这将是特定于浏览器的,因为它是浏览器决定如何处理表单数据。

另外,这个:

foo.php?a=

...和这个:

foo.php

...在语义上是不同的。在前者中,a通过空字符串 ( "") 传递,而在后者中,a根本不传递 ( null)。

此外,Wordpress 在这里是正确的,因为表单是搜索表单,因此它正在检索数据并且应该使用GET; 而不是像应该做的那样创建数据。POST

改变这种情况的一种方法(不使用 JavaScript)是使用网关脚本从 URL 中删除空参数并重定向。

每个例子:

$newGET = array();
foreach ($_GET as $key => $value) {
    if ($value !== '') $newGET[$key] = $value;
}

header('Location: some/url?'.http_build_query($newGET));
exit;
于 2012-04-08T21:17:21.137 回答