【发布时间】:2021-10-03 14:13:02
【问题描述】:
我正在开发一个 wordpress 电子商务网站,用户可以在其中搜索关键字,并将产品返回给用户。但是,wordpress 的默认搜索速度非常慢,所以我使用自定义端点来返回产品 ID。使用这些 id,我需要简单地告诉 Wordpress 忘记其当前查询并只显示这些帖子 id。这感觉应该是非常简单的事情,但我已经花了好几个小时努力尝试让它发挥作用。
我已经尝试了几件事,例如修改搜索查询并将 'post__in' 设置为帖子 ID 数组,但这不起作用,因为这仍然需要 wordpress 在检查查询值之前运行它的完整查询包含这些ID。我需要完全覆盖 wordpress 查询。因此,我尝试在查询参数中使用“post__in”在“pre_get_posts”中添加一个新的 WP_Query,并返回该查询而不是原始查询,但这也不起作用。
我还尝试取消设置 query 和 query_vars 的 's' 变量,以及将 is_search 设置为 false,但这绝对不起作用。我什至尝试使用 'query_posts' 挂钩来尝试直接修改 sql,但这证明与上面的另一次尝试存在相同的问题。查询仍然必须先运行,这是问题的一部分。
这里有一个类似的问题,但没有给出答案。 https://wordpress.org/support/topic/override-pre_get_posts-to-give-specific-ids-to-fetch/ 这听起来和我想做的几乎一模一样,所以很遗憾帖子被关闭了。
也许 functions.php 文件中的“pre_get_posts”不是正确的方法,但我不知道下一步该做什么。
此网站也在使用 woocommerce。另外,我对 Wordpress 还很陌生,所以这很可能是我缺少的一些简单的东西。
我刚刚发现这个https://core.trac.wordpress.org/ticket/36687#no0 可能会引导我走向正确的方向。我仍在测试它,但希望这是我需要的。
【问题讨论】:
标签: php wordpress search woocommerce