问题描述
我有多个阶段的过程,将复杂的 faceting 集成到 WP 查询中。问题是 – 越深入,我越来越模糊,我应该如何工作,我可以使用指南,而不是创造性 (并挖掘自己一个洞) 。
一般阶段我有 (pseudo-code,但接近真实):
-
从 URL 检索值 (简单的像
person=1
) -
过程值并附加自定义查询指令 (
$relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );
) -
检索最终自定义查询指令并生成相应的 SQL 指令
到目前为止,我已经有很多这样的关系 (关系,分类法,日期),并且变得脆弱 (代码的一个角落没有将代码的其他角落期望找到并且一切都分开) 。
如此大的问题是 – 通过 URL 传递,接收,存储和处理自定义数据到 WP 的正确协议是什么?
较小工具:
-
如何确保我不会与 WP 内部相冲突?
-
在哪里和如何存储中间数据?
-
query
和query_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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。