【问题标题】:ACF Query Posts by Repeater Field Not EmptyACF 查询帖子的转发器字段不为空
【发布时间】:2017-02-22 23:17:28
【问题描述】:

这个问题在互联网上似乎没有答案,也许是因为不可能。我只是想查询转发器字段“有行”的所有帖子。即

$args = array(
'meta_query'        => array(
'relation' => 'AND',
    array(
        'key'       => 'repeater_field',
        'value'     => '',
        'compare'   => '=!'
    )
);

我知道另一种方法是在循环内运行 if 语句以将它们过滤掉,但这会与其他一些基于查询中帖子数量的逻辑相混淆。

有人对此有什么想法吗?

【问题讨论】:

  • 您是在查询只有这个特定转发器字段的帖子吗?
  • 这就是我想要实现的,是的。查询所有在“repeater_field”中有值的帖子。
  • 如果您使用上述查询,键是您的转发器字段的名称,如'_repeater_field_name',您的值将是实际键,如'field_534eeaaa74199'。它总是有field_,然后是数字和字母。
  • 不幸的是,Alex 不起作用,他也尝试了许多不同的“比较”变体(存在、=、LIKE、!=、不存在等 - 没有任何影响)

标签: wordpress advanced-custom-fields


【解决方案1】:

假设您有一个标记为 我的中继器字段 的中继器字段,并且此中继器至少包含一个标记为 中继器上的字段 em>

假设您有默认的 wp_ 表前缀,您需要查看 DB 的 wp_postmeta 表以注意转发器上此字段的值与 meta_key 一起存储:

NAME_OF_THE_REPEATER_index_NAME_OF_FIELD_ON_THE_REPEATER

所以,在我们的例子中,如果一个帖子在转发器字段上有 3 行,它的值将被存储为:

my_repeater_field_0_a_field_on_the_repeater
my_repeater_field_1_a_field_on_the_repeater
my_repeater_field_2_a_field_on_the_repeater

知道了这一点,如果你想查询转发器上至少有一行的所有帖子,你可以这样做:

$meta_query = [
    [
        'key'     => 'my_repeater_field_0_a_field_on_the_repeater',
        'compare' => 'EXISTS',
    ]
];

$args = [
    'posts_per_page'   => -1,
    'orderby'          => 'date',
    'order'            => 'DESC',
    'meta_query'       => $meta_query,
    'post_type'        => 'post',
    'post_status'      => 'publish',
];

$posts_array = get_posts( $args );

注意:WP Docs 所述,您只能在 WP >= 3.5 上使用 EXISTS 比较,并且在使用 ' 时不需要指定值WordPress 3.9 及更高版本中的“存在”或“不存在”比较。我还假设您使用的是 PHP >= 5.4,因此您可以使用短数组语法。如果没有,只需将[] 替换为array()

【讨论】:

    【解决方案2】:

    您可以使用 $wpdb 对象查询 wordpress 数据库。 ACF 字段保存在数据库的 prod_postmeta 中,以便您运行查询。您的 meta_value 将是您的转发器字段的键,因此请确保在下面的查询中替换它。任何 ACF 字段的所有键都以 field_ 开头,然后是随机字符/数字,如下所示。然后,一旦您有了帖子 ID,就可以在这些帖子 ID 上运行 get_post()。让我知道您是否需要其他任何内容或有任何疑问。

    global $wpdb;
    $results = $wpdb->get_results("SELECT post_id from prod_postmeta WHERE meta_value = 'field_534eeaaa74199'");
    $echo $results;
    

    【讨论】:

    • 感谢您的回复,不幸的是这也不起作用。当我用我的字段键替换时,$results 是一个空数组。
    • 您有 SQL 工作台或其他任何东西来查看数据库中的内容吗?上面的查询应该返回一些东西,但如果它没有返回,那么还有其他问题。如果可以,请在您的实际数据库中运行查询,如果您对此有任何疑问,请发布屏幕截图。
    • 我正在运行一个非常普通的 WordPress 安装,不过会进一步调查该数据库查询。
    • 是的,当我无法让它做我想做的事情时,我经常用 WordPress 构建一个数据库查询 :) 它只是 SQL,数据就在那里,你只需要知道如何构建查询你可以很容易地得到它。
    【解决方案3】:

    这行得通。我已经测试过了。只有“欢迎世界”的帖子才行不通。

    $args = array(
        'post_type'=> 'post', 
        'posts_per_page' => -1,
        'meta_query'        => array(
            'relation' => 'AND',
            array(
                'key'       => 'repeater_field',
                'value'     => '0',
                'compare'   => '!='
            )
    ));
    $the_query = new WP_Query( $args );
    

    “repeater_field”是字段的名称,而不是 field_key。这是行数。

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 2018-10-06
      • 2020-12-13
      • 2017-05-10
      • 2021-07-06
      • 1970-01-01
      • 2020-01-28
      • 2015-12-09
      • 1970-01-01
      相关资源
      最近更新 更多