所以我试图制作一个简单的外部弹出窗口,其中包含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
是常规的帖子标记。
答案 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 !