WP自定义标签使用自定义表单进行搜索?

时间:2015-11-08 15:43:45

标签: wordpress

更新#1

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标签和类别。例如,视频可能包含标签:

  

新电影,酷炫,趋势,动作,惊悚

所以我想同时搜索多个标签。

我知道我只能使用这种表示法查询多个标签:

  

https://example.com/tag/key-word1+key-word2+key-word3/

所以我的想法是创建一个用户提交的表单,该表单将转到一个自定义的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>

parse.php

<?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站点中寻找多个标签的搜索的最佳方法是什么?

1 个答案:

答案 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;   
});`