我有一个客户端表单,您可以在其中选择各种字段,这将执行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"
}
最合适的回答,由SO网友:dingo_d 整理而成
我使用HistoryAPI解决了这个问题。
因为我的ajax返回的对象response
, html
和query
, 我使用将搜索的html结果推送到历史状态
window.history.pushState( date_out.html, null, null);
在哪里
data_out
是从ajax调用返回的对象。
然后我在单个广告页面上添加了一个按钮
window.history.back();
单击。这会将我发送到搜索结果页面。然后我可以检查搜索页面的url(可以硬编码,也可以从使用WordPress设置的本地化对象中提取),如果
history.state
它对应于搜索html,我只是把它放在所需的div之后。
然后在该检查中,我也会在历史记录中推空状态,以确保当您转到其他页面并推回时,不会看到任何搜索结果。
似乎工作正常:)