将wp_Query替换为wp_User_Query

时间:2022-02-09 作者:Kevin Nugent

我在插件中制作了一些订阅者档案和单曲(个人资料页),其中我还包括了一个“用户单曲”模板,通过template_include. 不过,我正在尝试从插件中删除一些模板,以使其使用主题模板。我用了locate_template( \'single.php\' ) 从活动主题中选择单个模板。我没有使用全局wp_query 在本例中显示我的内容,但页面显示了基于查询默认值的循环(十篇帖子)。

我想知道的是,我是否可以完全放弃默认查询,用wp_user_query 我可以将查询到的用户ID输入其中。然后我想筛选the_content 在该用户单上自定义输出。我试过使用pre_get_posts 甚至通过我的template_include 功能($wp_query->post_type = \'blah\') 但是没有用,因为查询最终总是返回到默认的十篇帖子。

有没有一种方法可以让我使用主题页。php(或single.php)模板,拦截查询以将其替换为wp\\u user\\u查询,或者这必须是自定义模板作业吗?

1 个回复
SO网友:Tom J Nowell

有没有一种方法可以让我使用主题页。php(或single.php)模板,拦截查询以将其替换为wp\\u user\\u查询,或者这必须是自定义模板作业吗?

No, WP页面是基于WP_Query. 您可以基于带参数的重写规则创建虚拟页面并加载模板,但模板负责加载内容,或者使用重写规则中的自定义参数执行常规WP\\U查询。

但是,您不能将post查询替换为术语查询或用户查询等,它们不可互换,也没有共同的基础。即使模板本身很好,您也会遇到任何试图键入提示的插件的问题,并且需要修改WordPress插件和主题的重要部分。至少你周围需要包装纸WP_User_QueryWP_User 模拟WP_QueryWP_Post, 任何试图使用post ID的代码都会以奇怪而奇妙的方式被彻底破坏。

创建自定义模板并使用WP_User_Query 直接地如果您正在寻找跨主题可移植的通用解决方案,则不存在任何解决方案。最接近的方法是在插件中包含自己的模板,然后尝试加载header.phpfooter.php 希望这就是该主题所需的全部内容(忽略块主题和网站模板)。

甚至通过我的template\\u include函数($wp\\u query->;post\\u type=\'blah\')推送查询变量,但都没有用,因为查询最终总是返回到默认的十篇文章。

到…的时候template_include 太晚了,主查询已经被处理、决定,数据库已经被查询。模板加载是最后一步,在检索帖子之后进行。