【问题标题】:Wordpress: Query post_title OR meta_queryWordpress:查询 post_title 或 meta_query
【发布时间】:2015-03-02 11:10:41
【问题描述】:

我正在为我的 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)(all other vars...)

【问题讨论】:

  • 我认为你不能在元查询中使用 post_title,因为它没有存储在 post_meta 表中。

标签: php wordpress meta-key


【解决方案1】:

无法直接使用 WP_Query 执行此操作。查询是由可怕的(超过 1000 行长)WP_Query::get_posts 方法(参见 wp-includes/query.php)中的参数构成的,主要是 AND 语句到 $where 变量的一长串串联。1

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

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

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


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

【讨论】:

    猜你喜欢
    • 2021-11-12
    • 2019-04-13
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-16
    • 2016-01-11
    • 2016-02-19
    • 2019-06-11
    相关资源
    最近更新 更多