I found this link here, which looks like a cleaner way of handling this
复制他的例子,似乎在WP 4.4之前它不会工作,因为我遇到了与该链接上的海报相同的问题:
网址会显示http://example.com/?s=searchterm&tag[]=key-word1&tag[]=key-word2
这会破坏标签搜索。然后删除[]只会搜索URL上的最后一个标记,这会破坏目的。
任何人都知道解决这个问题吗?
所以我有一个WP页面,我正在使用视频库。 所有视频都标有不同的WP标签和类别。例如,视频可能包含标签:
新电影,酷炫,趋势,动作,惊悚
所以我想同时搜索多个标签。
我知道我只能使用这种表示法查询多个标签:
所以我的想法是创建一个用户提交的表单,该表单将转到一个自定义的php页面,该页面将解析输入并重定向到正确的页面。
例如,假设我有这种形式:
<form method="post" action="parse.php">
<ul>
<li><input type="checkbox" name="Action" value="Action" />Action</li>
<li><input type="checkbox" name="Comedy" value="Comedy" />Comedy</li>
<li><input type="checkbox" name="Drama" value="Drama" />Drama</li>
<li><input type="checkbox" name="Old-Movies" value="Old-Movies" />Old Movies</li>
<li><input type="checkbox" name="New-Movies" value="New-Movies" />New Movies</li>
<li><input type="checkbox" name="Lame" value="Lame" />Lame</li>
<li><input type="checkbox" name="Cool" value="Cool" />Cool</li>
<li><input type="checkbox" name="Thriller" value="Thriller" />Thriller</li>
<li><input type="checkbox" name="Boring" value="Boring" />Boring</li>
<li><input type="checkbox" name="Trending" value="Trending" />Trending</li>
<li><input type="checkbox" name="Unpopular" value="Unpopular" />Unpopular</li>
</ul>
<input type="submit" value="Search Now!" />
</form>
<?php
$input_vars = $_POST;
$count = count($input_vars);
$i = 0;
$uri = "http://example.com/tag/";
foreach($_POST as $name=>$value) {
++$i;
if($i !== $count)
$uri .= $value."+";
else
$uri .= $value;
}
$uri .= "/";
header("Location: $uri");
exit;
?>
虽然这似乎有效,但我不确定这是否会被认为是最佳做法&#34;解决这个问题的方法。
处理在WP站点中寻找多个标签的搜索的最佳方法是什么?
答案 0 :(得分:1)
由于input
代码需要name
属性,因此不确定这是如何运作的。可能是遗漏。
<li><input name="type[]" type="checkbox" value="Action" />Action</li>
<li><input name="type[]" type="checkbox" value="Comedy" />Comedy</li>
...
此外,通过使用type[]
,您可以确保在$_POST
$input_vars = $_POST['type'];
$count = count($input_vars);
$i = 0;
$uri = "http://example.com/tag/";
foreach($input_vars as $name=>$value) {
++$i;
if($i !== $count)
$uri .= $value."+";
else
$uri .= $value;
}
$uri .= "/";
header("Location: $uri");
exit;
此外,您可能需要重新考虑创建新页面以检查这些值并挂钩到“template_redirect”以执行重定向。
add_action("wp_redirect", function()
{
$input_vars = $_POST['type'];
$count = count($input_vars);
$i = 0;
$uri = "http://example.com/tag/";
foreach($input_vars as $name=>$value) {
++$i;
if($i !== $count)
$uri .= $value."+";
else
$uri .= $value;
}
$uri .= "/";
wp_redirect($uri);
exit;
});`