我们最近遇到了一个需要从我们的WordPress搜索结果页面中排除一组自定义文章的需求,基于这些文章的自定义字段设置的值。

pre_get_postsAction钩子允许您在页面运行之前更改它的数据库查询。以下是我们是如何做到的。

在本例中,我们试图排除的自定义帖子并不经常更改,因此我们使用瞬变的API出于性能原因。

pre_get_postsHook非常强大,如果您没有正确设置条件来确定查询修改发生的确切时间,则可能会产生意想不到的后果。在我们的例子中,我们一开始没有! is_admin ()条件集,最后发生的是它破坏了我们的媒体库搜索功能,因为媒体库也使用搜索查询。

我们还遇到了一个与之竞争的函数的问题pre_get_posts并设置自己的posts__not_in参数。由于该函数在此函数之后运行,因此它覆盖了我们试图排除的posts数组。有两种方法可以解决这个问题。在我们的例子中,我们只是通过添加我们试图排除的其他post id来合并这两个函数array_push.您还可以使用查询- > get (post__not_in)并在调用前合并两个数组查询- >设置.这种方法的挑战在于,您仍然必须注意函数执行的顺序。

我的建议是,合并用于更改数据库查询的函数pre_get_posts,因为在多个函数中以类似的方式更改查询很可能会导致意想不到的结果。

最新的开发者博客文章

GeekWork上的工作清单

找到更多的工作GeekWork.雇主,在这里发布工作