Wordpress:查询post_title或meta_query

时间:2015-01-04 21:38:58

标签: php wordpress wp-query meta-key

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

我有一个搜索表单,用户可以在其中输入一些文字,此文字可以是post_titlemeta_value (Company ID)中的单词。

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

这些是我WP_Query

的Args
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...)

1 个答案:

答案 0 :(得分:0)

直接使用WP_Query执行此操作。查询是根据monstrous(超过1000行)WP_Query::get_posts方法中的参数构建的(参见wp-includes / query.php),主要是AND语句到{{$where语句的一系列连接。 1}}变量。 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,而是一个专门的类,用于根据这些规则获取查询字符串变量和过滤帖子。