【问题标题】:ACF: search by relationship fieldACF:按关系字段搜索
【发布时间】:2018-01-09 11:58:42
【问题描述】:

我使用过 ACF 关系字段。字段名称是 international_mins_category_a_countries 。该字段有多个值。

如果我打印它((get_field("international_mins_category_a_countries", get_the_ID())) 打印一个数组 -

array
(
    [0] => 737
    [1] => 734
    [2] => 723
    [3] => 1484
}

现在我正在尝试搜索/过滤值为 737 的帖子。

但我没有得到任何结果。

Code I have used to filter that is ---

'meta_query'    =>  array(
            array(
                'key'       =>  'international_mins_category_a_countries',
                'value'     =>  '737',
                'compare'   =>  'IN',
            ),
        )

但没有结果。有人可以帮忙吗?

【问题讨论】:

  • 所以您只返回关系中的 ID - 但您实际上可以将其设置为返回整个帖子对象 - 这样您就已经拥有所有数据。
  • 是的,我有所有数据,但我不想选择所有数据,插入我想选择那些具有该 ID 的数据
  • 你能再解释一下吗?例如,它是什么样的关系字段?您还可以提供整个 WP Query 参数吗?
  • @justkidding96,这些是其他帖子类型的 ID,比如国家/地区。
  • @Alice 那么你想从关系字段数组中按 id 检索所有帖子吗?

标签: wordpress advanced-custom-fields


【解决方案1】:

来自 ACF 关系字段的数据作为序列化数组存储在数据库中,这不是此类查询的理想格式。该数组已在数据库中压缩为单个字符串,而不是存储为多条记录。

这意味着您必须使用 LIKE 子句来查找匹配的记录。

您需要将比较参数设置为 LIKE,并在 ID 周围加上引号以防止不完全匹配(例如 7374、5737 等)。

'meta_query'    =>  array(
    array(
        'key'     =>  'international_mins_category_a_countries',
        'value'   =>  '"737"',
        'compare' =>  'LIKE',
    ),
)

ACF 不会让您对这些数据的存储方式进行太多控制,但我要指出的是,LIKE 查询通常表现不佳。

文档:https://www.advancedcustomfields.com/resources/querying-relationship-fields/

【讨论】:

  • 所以如果 id 是 7,那么它也会匹配 737
  • 不,这就是在 ID 周围加上双引号的目的。他们将防止这种类型的错误匹配。
猜你喜欢
  • 2016-06-08
  • 2019-09-26
  • 2016-03-07
  • 2017-06-20
  • 2015-01-29
  • 1970-01-01
  • 2017-03-07
  • 1970-01-01
  • 2018-02-10
相关资源
最近更新 更多