如何为自定义帖子类型创建自定义URL参数的自定义搜索结果页面?

时间:2018-03-08 作者:Reygoch

所以我想问题是:How do I define new page/url to which I can pass custom parameters, do a search for custom post type and pass the results to custom template for rendering?

我制作了一个自定义的帖子类型Apartment. 公寓占用了数据库中记录的日期,我希望用户能够搜索两个日期之间的免费公寓。

我知道如何使用搜索算法,但我不知道在WordPress中使用自定义参数定义新搜索页面的最佳方法是什么。

如果可能的话,我也希望避免在模板文件中编写搜索算法。

URL应如下所示:

  • mysite.com/find/begin-date/end-datemysite.com/find/2018-03-05/2018-03-10
但如果它看起来像这样,也可以:

  • mysite.com/find?begin=2018-03-05&end=2018-03-10

1 个回复
最合适的回答,由SO网友:Hassan Alvi 整理而成

将此代码添加到functions.php

function custom_rewrite_rule() {

    //Initializing Rewrite Tags
    add_rewrite_tag(\'%begin-date%\', \'([^&]+)\');
    add_rewrite_tag(\'%end-date%\', \'([^&]+)\');
    add_rewrite_tag(\'%offset%\', \'([^&]+)\');

    //Find page rewrite rules
    add_rewrite_rule(\'^find/([^/]*)/([^/]*)/([^/]*)/?\',\'index.php?page_id=<SEARCH_PAGE_ID>&begin-date=$matches[1]&end-date=$matches[2]&offset=$matches[3]\',\'top\');
    add_rewrite_rule(\'^find/([^/]*)/([^/]*)/?\',\'index.php?page_id=<SEARCH_PAGE_ID>&begin-date=$matches[1]&end-date=$matches[2]\',\'top\');

    flush_rewrite_rules();
}
add_action(\'init\', \'custom_rewrite_rule\', 10, 0);
在自定义搜索页面模板上

$begin_date = get_query_var(\'begin-date\');
$end_date   = get_query_var(\'end-date\');
$offset     = get_query_var(\'offset\') ? get_query_var(\'offset\') : 1;
创建包含slug的页面find 并在其上应用自定义页面模板。。代替<SEARCH_PAGE_ID> 使用新创建的页面ID并更新永久链接结构!

在页面模板中的自定义查询中使用这些值!:)

此代码将根据您所需的结构呈现URL!

我的网站。com/查找/开始日期/结束日期。com/find/begin date/end date/offset(如果需要启用分页)如果需要第二个选项。。您只需在查找页面模板上使用以下代码,一切都将正常工作!

$begin_date = $_GET[\'begin\'];
$end_date   = $_GET[\'end\');
$offset     = $_GET[\'page\'] ? $_GET[\'page\'] : 1;
我的网站。通信/查找?开始=2018-03-05;结束=2018年3月10日。通信/查找?开始=2018-03-05;结束=2018年3月10日;页码=2

结束

相关推荐

CPT, meta-data, url parameter

有人能给我讲讲,解释一下如何创建一些通过pretty link传递的“过滤器”吗?让我自我解释一下,我有一个自定义的帖子类型,叫做\"spectacle\" 我有一个meta\\u键,其中包含了这场奇观的一系列日期。我知道如何提取我的日期,并对其进行过滤如果我明确地对我的显示进行一些过滤,我的问题不是从那里来的,我试图实现的是访问http://myurl.com/spectacles (展示即将到来的眼镜-already done) http://myurl.com/spectacles/2014 (展