4

我正在为我的 Wordpress 自定义查询问题寻找解决方案。

我有一个搜索表单,用户可以在其中输入一些文本,该文本可以是来自post_titlemeta_value (Company ID).

所以,我需要在post_titlemeta_key-Field“id-number”中搜索字符串,但我还有一些其他额外的搜索参数。

这些是我的参数WP_Query

Array(
    [post_type] => company
    [pagination] => 1
    [posts_per_page] => 10
    [paged] => 1
    [meta_query] => Array
        (
            [relation] => AND
            [0] => Array
                (
                    [0] => Array
                        (
                            [key] => id-number
                            [value] => FOOBAR
                        )

                    [1] => Array
                        (
                            [key] => post_title
                            [value] => FOOBAR
                            [compare] => LIKE
                        )

                    [relation] => OR
                )

            [1] => Array
                (
                    [relation] => AND
                    [0] => Array
                        (
                            [0] => Array
                                (
                                    [key] => country
                                    [value] => USA
                                )
                            [relation] => OR
                        )
                )
        )
)

Array[meta_query][0][1] (post_title)只是一个占位符 - 我知道这行不通,但我如何搜索 (id-number OR post_title)AND(all other vars...)

4

1 回答 1

0

无法直接使用 WP_Query 执行此操作。查询是由怪异的(超过 1000 行长)WP_Query::get_posts方法(参见 wp-includes/query.php)中的参数构造的,主要是一系列与变量的连接AND语句。1$where

现在,您可以连接到许多过滤器来自定义该变量(保存查询的 SQL)的构造方式。在您的情况下,以下其中一项可能是合适的:

  • posts_search:让您更改搜索查询的解释方式(来自 Wordpress 内置/标准搜索表单)。然后,您将根据需要从搜索查询中手动构建您的 where 查询。
  • posts_where:允许您更改整个 where 查询——不过,对于每个查询。

使用过滤器,您不会真正向 WP_Query 发送参数并以“正常方式”构造它,而是覆盖 SQL WHERE 查询的构造方式。完全运行自己的 SQL 查询可能会更好。该法典有一篇使用自定义选择查询显示帖子的文章,详细说明了如何做到这一点。


1. WP_Query 根本不是一个完整的 ORM,而是一个用于获取查询字符串变量并根据这些规则过滤帖子的专用类。

于 2015-01-05T07:26:55.390 回答