【问题标题】:WordPress / PHP: Add search string onto existing query stringWordPress / PHP:将搜索字符串添加到现有查询字符串中
【发布时间】:2011-12-26 21:44:49
【问题描述】:

在 wordpress 主题中,我设置了一些基于自定义分类法的搜索过滤器,它们将使用以下 URL 结构查询帖子:

http://myblog.com/?taxonomy1=term1+term2&taxonomy2=term3+term4

除了这些过滤器之外,我还想集成文本搜索,但不知道如何将搜索查询(例如 ?s=mysearchhere)附加到现有分类查询中。所以总的来说,我希望表单在提交时能够指向一个结合了两个字符串的 url:

“http://myblog.com/?taxonomy1=term1+term2&taxonomy2=term3+term4&s=mysearchhere”

到目前为止,我已经尝试使用以下功能生成搜索表单:

 function remove_querystring_var($url, $key) { 
        $url = preg_replace('/(.*)(?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&'); 
        $url = substr($url, 0, -1); 
        return $url; 
    }

function apl_search_form($echo = true) {
    do_action( 'get_search_form' );

    $search_form_template = locate_template('searchform.php');
    if ( '' != $search_form_template ) {
        require($search_form_template);
        return;
    }

    $url = $_SERVER["REQUEST_URI"]; 
    $action = remove_querystring_var($url,'s');


    $form = '<form role="search" method="get" id="searchform" action="' . $action . '" >
    <div><label class="screen-reader-text" for="s">' . __('Search for:') . '</label>
    <input type="text" value="' . get_search_query() . '" name="s" id="s" />
    <input type="submit" id="searchsubmit" value="'. esc_attr__('Search') .'" />
    </div>
    </form>';

    if ( $echo )
        echo apply_filters('get_search_form', $form);
    else
        return apply_filters('get_search_form', $form);
}

这似乎不起作用。这个问题比我想象的要复杂吗?还是我走在正确的轨道上?有谁知道这种编码的简单方法?

非常感谢!

【问题讨论】:

  • 您能否更具体地了解“似乎不起作用”?您的表单值将自动附加到 URL,b/c 您正在执行“获取”与“发布”。

标签: php forms wordpress search query-string


【解决方案1】:

您可以使用&amp; 将搜索词附加到您的网址,如下所示

&s=mysearchhere

主 URL 后的第一位数据以“?”开头然后对于之后的每一个额外的数据位,它总是附加一个“&”。你永远不需要'&?在一起。

然后用

检索它
$query = $_GET['s'];

也许这会有所帮助。

【讨论】:

    【解决方案2】:

    我刚刚遇到了这个确切的问题并找到了解决方案。

    为了澄清问题,假设您有一个搜索表单:

    <form method="get" action="http://myblog.com/?taxonomy1=term1">
    <input type="text" name="keyword" />
    </form>
    

    请注意,键/值 taxonomy1=term1 是操作 URL 的一部分。

    现在假设用户搜索“asdf”。这是我天真地期望的 URL:

    http://myblog.com/?taxonomy1=term1&keyword=asdf
    

    以下是 URL 的实际内容:

    http://myblog.com/?keyword=asdf
    

    具有键/值“taxonomy1=term”的 URL 部分被剥离。

    “添加查询字符串”的方法是在表单中添加一个隐藏的输入字段:

    <input type="hidden" name="taxonomy1" value="term" />
    

    要向查询字符串添加更多参数,您可以添加任意数量的隐藏类型输入,如下所示:

    <input type="hidden" name="taxonomy1" value="term" />
    <input type="hidden" name="taxonomy2" value="term3" />
    

    我刚刚验证了这一点,所以我确信它有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 1970-01-01
      • 2022-10-25
      • 2012-07-23
      • 1970-01-01
      • 2018-07-14
      • 1970-01-01
      相关资源
      最近更新 更多