这个问题在互联网上似乎没有答案,也许是因为这是不可能的。我只是想查询转发器字段“有行”的所有帖子。即。
$args = array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'repeater_field',
'value' => '',
'compare' => '=!'
)
);
我知道另一种方法是在循环中运行if语句来过滤掉它们,但这会混淆一些基于查询中帖子数量的其他逻辑。
有没有人对此有任何想法?
答案 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。这是行数。