在提交表单上更改URL

时间:2013-02-11 14:36:42

标签: forms wordpress search input

所以我试图制作一个简单的外部弹出窗口,其中包含1个类别下拉菜单和4列复选框作为标记。 (这是为wordpress搜索引擎插件提供的)

我使用常规表单提交,但我最终将其作为最终网址:

Site.com/?category_name=VALUE&tag=TAG1&tag=TAG2&tag=TAG3

但我希望我的网址如下:

Site.com/?category_name=VALUE&tag=tag1+tag2+tag3

有人能指出我正确的方向来实现这个目标吗?

CATEGORY_NAME用于搜索特定的WordPress类别 TAGS是常规的帖子标记。

2 个答案:

答案 0 :(得分:0)

您无法使用复选框执行此操作。这不是复选框的工作方式。真的,这不是一个选择。这就是构建HTML,PHP和浏览器的方式。

此外,你所做的不会奏效。您已将相同的变量设置为几个不同的字段。每次设置为,都会覆盖以前的值。如果您要在脚本中添加?category_name=VALUE&tag=TAG1&tag=TAG2&tag=TAG3,那么您的网址可能会显示var_dump($_GET);,但您会发现PHP看到的唯一内容是最后一个 - tag=TAG3

您可以使用方括号 - [] - 在复选框名称中获取代码。非常小代码中的一个示例(仅用于演示目的):

echo '<form>';
 echo '<input type="checkbox" name="tag[]" value="tag1">';
 echo '<input type="checkbox" name="tag[]" value="tag2">';
 echo '<input type="checkbox" name="tag[]" value="tag3">';
 echo '<input type="checkbox" name="tag[]" value="tag4">';
 echo '<input type="checkbox" name="tag[]" value="tag5">';
 echo '<input type="checkbox" name="tag[]" value="tag6">';
 echo '<input type="submit" value="Clickie">';
echo '</form>';

您网址的“标记”部分将如下所示:

&tag[]=tag1&tag[]=tag4&tag[]=tag6

这就是复选框的工作原理。我能想到两种解决方法。

第一种方法是使用Javascript填充表单中的隐藏字段。

echo '<form>';
 echo '<input type="hidden" name="tag" value="">';
 echo '<input type="checkbox" value="tag1">';
 echo '<input type="checkbox" value="tag2">';
 echo '<input type="checkbox" value="tag3">';
 echo '<input type="checkbox" value="tag4">';
 echo '<input type="checkbox" value="tag5">';
 echo '<input type="checkbox" value="tag6">';
 echo '<input type="submit" value="Clickie">';
echo '</form>';

您可以让Javascript监视这些复选框的点击次数,并将值填入隐藏标记字段。为了获得您想要的URL,您必须从复选框中删除name,这使得此表单完全依赖于Javascript。没有Javascript它将无法正常工作。我认为这是糟糕的设计。

另一种选择是使用mod_rewrite来尝试重写您的网址,但老实说,我不知道mod_rewrite是否能够使用复杂的正则表达式来完成这项工作。

我认为无论是值得努力还是价格都没有变通办法。我建议你使用方括号并在接收端处理数组。换句话说,如果您有&tag[]=tag1&tag[]=tag4&tag[]=tag6,那么这会在您的网址中获得您想要的字符串:

if (isset($_GET['tag'])) {
  $tstr = implode('+',$_GET['tag']);
}
echo $tstr;

您可以在搜索功能中使用它,无论您使用的是什么。

答案 1 :(得分:0)

这就是我所做的。而不是在我的wordpress中添加额外的功能(在更深层次测试时会导致一些意外错误),我只是创建了一个PHP来捕获URL,然后再提交。

这就是它的样子:

    <?php

if (isset($_GET['tag'])) {
  $tstr = implode('+',$_GET['tag']);
}

$cat = ($_GET['category_name']);

header("Location: http://url.com/?category_name=$cat&tag=$tstr");

?> 


I don't know if this is correct or secure, but it works :D
Thanks for your help !