从页面返回到AJAX搜索结果

时间:2017-06-10 作者:dingo_d

我有一个客户端表单,您可以在其中选择各种字段,这将执行AJAX搜索,并返回自定义帖子类型的结果。

现在,客户希望在单击单个结果(特定的单个CPT)时有一个“返回搜索结果”按钮。

我的想法是在每个结果的永久链接的url上附加一个查询参数,该url将包含查询参数的json,类似

<a href="\' . get_permalink() . \'"?query_string=\' . wp_json_encode( $args ) . \'>Find out more<a>
然后,我可以读取查询参数,并将其在单个自定义帖子类型页面上传递到反向链接,用户单击后,反向链接将再次作为查询参数传递。通过这种方式,我可以检查这样的参数是否存在,并在此基础上解析它并运行我通常在ajax搜索中执行的查询。

这听起来不错,但我需要对解析后的数组进行编码,而且在这条路上可能会有很多问题(例如将其作为wp_json_encode 不起作用,我可能需要使用htmlentities 或者类似的东西)。

我曾考虑将参数数组暂时存储在transient中,但这并不好,因为如果其他人在第一个人位于单个页面上时进行另一次搜索,会怎么样?这会改变结果,最终不会奏效。

我还将该查询添加到ajax中的response对象中,但这仅在结果页面上有效。有没有办法暂时本地化该对象或该查询字符串,以便将其保留在下一页上?

欢迎任何想法。

EDIT

查询参数的json为

{  
"post_type":"adverts",
   "tax_query":{  
      "relation":"AND",
      "0":{  
         "taxonomy":"advert_industry_category",
         "field":"term_id",
         "terms":1560,
         "operator":"IN"
      },
      "1":{  
         "taxonomy":"advert_location_category",
         "field":"slug",
         "terms":"england",
         "operator":"IN"
      },
      "2":{  
         "taxonomy":"advert_facilities_category",
         "field":"name",
         "terms":[  
            "Car parking"
         ],
         "operator":"IN"
      }
   },
   "meta_key":"advert_company_rating",
   "meta_value":"4"
}

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

我使用HistoryAPI解决了这个问题。

因为我的ajax返回的对象response, htmlquery, 我使用将搜索的html结果推送到历史状态

window.history.pushState( date_out.html, null, null);
在哪里data_out 是从ajax调用返回的对象。

然后我在单个广告页面上添加了一个按钮

window.history.back();
单击。这会将我发送到搜索结果页面。然后我可以检查搜索页面的url(可以硬编码,也可以从使用WordPress设置的本地化对象中提取),如果history.state 它对应于搜索html,我只是把它放在所需的div之后。

然后在该检查中,我也会在历史记录中推空状态,以确保当您转到其他页面并推回时,不会看到任何搜索结果。

似乎工作正常:)

结束

相关推荐

基于AJAX过滤器的AJAX分页

在这篇很棒的教程之后,我已经通过滚动实现了Ajax分页:https://www.billerickson.net/infinite-scroll-in-wordpress/.现在,我已经添加了第二个Ajax调用来按类别过滤帖子,并且我还希望对过滤后的帖子进行分页。所以我想在函数的filter_posts()中做这样的东西。php:function filter_posts() { global $wp_query; $args[\'category_name\'] = $_PO