由Repeater字段的ACF查询帖子不为空

时间:2016-10-13 17:43:50

标签: wordpress advanced-custom-fields

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

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

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

有没有人对此有任何想法?

3 个答案:

答案 0 :(得分:6)

我们认为您的转发器字段标有 我的转发器字段 ,此转发器至少包含一个标记为 A字段的字段中继器

假设您有默认的wp_表前缀,您需要查看数据库的wp_postmeta表,注意转发器上此字段的值与{{1}一起存储}}:

  

NAME_OF_THE_REPEATER_index_NAME_OF_FIELD_ON_THE_REPEATER

因此,在我们的例子中,如果帖子在转发器字段中有3行,则其值将存储为:

meta_key

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

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

注意:WP Docs所述,您只能使用WP> = 3.5上的$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 ); 比较和您不需要使用' EXISTS'时指定一个值或者' NOT EXISTS' WordPress 3.9及更高版本中的比较。我还假设您使用的是PHP> = 5.4,因此您可以使用短数组语法。如果没有,只需将EXISTS替换为[]

答案 1 :(得分:1)

您可以使用$ 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;

答案 2 :(得分:0)

这很有效。我测试过了。只有欢迎世界"发布它不起作用。

$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。这是行数。