查询 post_title 或 meta_query

use*_*008 5 php wordpress meta-key

我正在寻找 WordPress 自定义查询问题的解决方案。我有一个搜索表单,用户可以在其中输入一些文本,该文本可以是 或 中的post_title单词meta_value (Company ID)

post_title我需要在“或”“id-number”中搜索字符串meta_key-Field,但我还有一些其他附加搜索参数。这些是我的参数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
                        )
                )
        )
)
Run Code Online (Sandbox Code Playgroud)

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

vic*_*vic 0

使用 WP_Query 无法直接完成此操作。该查询是根据可怕的(超过 1000 行长)WP_Query::get_posts方法(请参阅 wp-includes/query.php)中的参数构造的,主要是一系列AND到变量的语句串联$where1

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

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

使用过滤器,您实际上不会将参数发送到 WP_Query 并以“正常方式”构造它,而是覆盖 SQL WHERE 查询的构造方式。您最好完全运行自己的 SQL 查询。该法典有一篇文章使用自定义选择查询显示帖子,详细介绍了如何完成此操作。


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