问题描述

我有多个阶段的过程,将复杂的 faceting 集成到 WP 查询中。问题是 – 越深入,我越来越模糊,我应该如何工作,我可以使用指南,而不是创造性 (并挖掘自己一个洞) 。

一般阶段我有 (pseudo-code,但接近真实):

  1. 从 URL 检索值 (简单的像 person=1)

  2. 过程值并附加自定义查询指令 ($relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );)

  3. 检索最终自定义查询指令并生成相应的 SQL 指令

到目前为止,我已经有很多这样的关系 (关系,分类法,日期),并且变得脆弱 (代码的一个角落没有将代码的其他角落期望找到并且一切都分开) 。

如此大的问题是 – 通过 URL 传递,接收,存储和处理自定义数据到 WP 的正确协议是什么?

较小工具:

  • 如何确保我不会与 WP 内部相冲突?

  • 在哪里和如何存储中间数据?

    • queryquery_vars 性质的区别?他们似乎在代码中使用的几乎相同,但它们倾向于持有不同的值和方法,有利于 query_vars

最佳解决方案

我想你正在寻找的 WP 功能是 add_rewrite_tag 。它旨在向您的 URL 添加自定义 GET 参数,并将其自动添加到 query_vars 中。

例如,您可以将以下内容添加到 init 钩子中:

add_rewrite_tag('%person%','([^&]+)');

对于像 http://example.com?person=joe 这样的网址,全球 $wp_query 将有

$wp_query->query_vars['person'] = 'joe'

您也可以使 add a rewrite rule 使 URL 更漂亮,例如 http://example.com/person/joe

add_rewrite_rule('^person/([^/]*)/?','index.php?person=$matches[1]','top');

有关更多信息和示例,请参阅 Rewrite API

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。