Nic*_*ick 6 wordpress advanced-custom-fields
这个问题在互联网上似乎没有答案,也许是因为这是不可能的.我只是想查询转发器字段"有行"的所有帖子.即
$args = array(
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'repeater_field',
'value' => '',
'compare' => '=!'
)
);
Run Code Online (Sandbox Code Playgroud)
我知道另一种方法是在循环中运行if语句来过滤它们,但是这会混淆一些基于查询中帖子数量的其他逻辑.
有没有人对此有任何想法?
让我们考虑你有一个标有My Repeater Field的Repeater Field,这个转发器在Repeater上至少包含一个标记为A Field的字段.
假设您有默认的wp_表前缀,您需要查看数据库的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
Run Code Online (Sandbox Code Playgroud)
知道了这一点,如果你想查询转发器上至少有一行的所有帖子,你可以这样做:
$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 );
Run Code Online (Sandbox Code Playgroud)
注意:如WP Docs所述,您只能EXISTS在WP> = 3.5上使用比较,并且在WordPress 3.9及更高版本中使用"EXISTS"或"NOT EXISTS"比较时无需指定值.我还假设您使用PHP> = 5.4,因此您可以使用短数组语法.如果没有,只是更换[]了array().
| 归档时间: |
|
| 查看次数: |
3250 次 |
| 最近记录: |