搜索URL前面的自定义插件

时间:2015-06-28 作者:Sam Holguin

我会尽力解释的。。。

我的主页上有一个搜索表单:

<form role="search" method="get" id="searchform" class="form" action="<?php echo esc_url( home_url( \'/\' ) ); ?>">
    <label class="u-visuallyHidden" for="s">Search for property:</label>
    <input type="search" class="form-input search-bar-input" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="enter location here" autocomplete="off" />

    <button type="submit" class="btn search-bar-btn" id="searchsubmit">
        <span class="u-verticalAlignMiddle"><i class="icon-search"></i> <span class="u-visuallyHidden">Search</span></span>
    </button>
</form>
在我的搜索中还有更深入的搜索表单。php的模板,其中包含许多与某些用户输入选择器相关的隐藏字段。然后,搜索结果采用$_GET 请求和我构建自定义$wp_query.

一切正常。。。但是,我想将我的搜索URL更改为:

http://mydomain.dev/student/?s=
我尝试将操作更改为esc_url( home_url( \'/student/\' ) ) 但当输入搜索词时,我只得到一个404。

我已经使用了“template\\u redirect”操作和重写规则,但我不想要很好的永久链接,因为我的优化搜索表单添加了许多额外的URL参数。例如,用户搜索可以生成以下URL:

http://mydomain.dev/?s=&letmc_type=professional&custom_locations=SomeCity&min_bedrooms=2&price_min=60&price_max=70
此外,WordPress是否有更好的方法来利用查询参数,而不是$_GET 超全局?

3 个回复
SO网友:davey

以上这些都不适合我。通过使用search\\u rewrite\\u rules筛选器覆盖搜索重写规则,找到了另一个解决方案。

1-将其添加到函数中。主题的php:

add_filter( \'search_rewrite_rules\', function($rules) {
    
     $new_rules = [];

     // New search slug here
     $new_search_slug = \'zoeken\';
    
     foreach ($rules AS $key => $value){
        
         $new_rules[str_replace(\'search\', $new_search_slug, $key)] = $value;
        
     }

     return $new_rules;

});
2-将永久链接保存在设置下的WordPress admin中->;Permalinks。

现在是页面https://www.mywebsite.com/zoeken/searchterm 正在显示搜索结果页面。

SO网友:lucian

默认的“漂亮”替代?s=/search/ - 你现在应该可以使用它了。

如果要将其更改为student,请将其添加到函数中。php文件:

function re_rewrite_rules() {
    global $wp_rewrite;
    $wp_rewrite->search_base        = \'student\';
}
add_action(\'init\', \'re_rewrite_rules\');

SO网友:Adebowale

这在我的网站上非常适合我:nnn.com.ng. 其他解决方案为我抛出404错误。

/**
* initiate a change of the wordpress default search page slug to the new search page slug.
*/
add_action( \'init\', \'dsfs\' );

function dsfs()
{
    $GLOBALS[\'wp_rewrite\']->search_base = \'%your_search_string%\';
}

/**
* redirect default search page slug to the new search page slug.
*/

function wpcs_url() {
    if ( is_search() && ! empty( $_GET[\'s\'] ) ) {
        wp_redirect( home_url( "/your_search_string/" ) . urlencode( get_query_var( \'s\' ) ) );
        exit();
    }  
}
add_action( \'template_redirect\', \'wpcs_url\' );
您需要在“your\\u search\\u string”(例如%student%)之前和之后添加“%”,它才能工作。如果是带有缓存插件的生产站点,则可能需要刷新缓存。

结束

相关推荐

Search tags in CPTs

我似乎不知道如何在wordpress搜索中包含标签。例如,如果我搜索“apple”,我希望在标题或内容中返回带有“apple”的帖子(默认wordpress功能)as well as 包含标签“apple”的帖子;当我添加\'tag\' => $keyword 行到WP\\u查询中,然后每次搜索都没有结果。$keyword = get_search_query(); $args = array( \'post_type\' => array(\'case_studie