对于来自WP_Query中URL的自定义数据合适的流程是什么?


14

我有多个阶段的流程,将复杂的方面集成到WP查询中。问题是-我对应该如何工作越了解,我就越模糊,我可以使用指南而不是进行发明(挖一个洞)。

我有一般阶段(伪代码,但接近真实):

  1. 从URL检索值(类似的简单内容person=1
  2. 处理值并附加自定义查询指令($relationship_query[] = array('relationship' => 'person_to_cat', 'object' => 1 );
  3. 检索最终的自定义查询指令并生成适当的SQL指令

到现在为止,我正在进行很多此类工作(关系,分类法,日期),并且它变得脆弱(代码的某个角落没有把价值放在代码的其他角落期望找到的地方,并且一切都变得分离了)。

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

较小的零件:

  • 如何确保我不与WP内部发生冲突?
  • 我在哪里以及如何存储中间数据?
    • queryquery_vars属性之间的区别?它们似乎在代码中几乎相同地使用,但是它们倾向于持有不同的值,并且方法偏向于query_vars一个。

Answers:


6

我认为您正在寻找的WP函数是add_rewrite_tag。它旨在将自定义GET参数添加到您的URL并将其自动包含在中query_vars

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

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

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

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

您还可以添加重写规则以使URL更漂亮,例如http://example.com/person/joe

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

有关更多信息和示例,请参见重写API


2
我发现了一些时间(最后)通过所有相关的代码来读取WPWP_Query,虽然有很多事情发生的事情,我认为这add_rewrite_tag()似乎是最简洁的方式,使WP了解自定义查询VAR和它玩好。
罗斯特(Rarst)2012年

1
  1. 签出wp-includes / class-wp.php来检查任何保留的query_vars
  2. 我不确定中间数据是什么意思。你能解释更多吗?
  3. WP基于URL上的query_string加载页面,该URL转换为查询,然后由WP_Query处理它们以确定正在使用哪个query_var。

示例:通过加载带有/?pagename = about的页面,WP将处理查询字符串并找到正在使用的query_var是page_id。

另一个示例:/?cat = 1,/?category_name =未分类和/ category / uncategorized具有相同的query_var'cat'


0

我以为可以通过$_GET和/或完成$_POST此操作,然后进行相应的操作。

或者,将大量数据存储在db中,然后将id解析为url,如下所示

$data_id = $_GET['id'];

$data = $wpbd->get_results("SELECT * FROM wp_epic_table WHERE id=".$id);

该查询显然不是那么简单,它可能涉及很多联接和联接表。这就是我在其中一页中所做的事情,解析一个唯一的ID,然后通过MySQL构建数据。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.