使用高级自定义字段过滤和排序 wordpress get_posts
filter and sort wordpress get_posts with advanced custom fields
我有两个使用高级自定义字段创建的自定义字段。
一种是复选框类型 (isEvent),另一种是日期类型 (closing_date)。
如果我想获得所有作为事件的帖子,我会做这样的事情
<?php $args = array(
'posts_per_page' => 7,
'offset' => 0,
'category' => '',
'category_name' => '',
'orderby' => '',
'order' => '',
'include' => '',
'exclude' => '',
'meta_key' => 'is_event',
'meta_value' => 'a:1:{i:0;s:4:"true";}',
'post_type' => 'events',
'post_mime_type' => '',
'post_parent' => '',
'author' => '',
'post_status' => 'publish',
'suppress_filters' => 0
);
$my_posts_array = get_posts( $args );
这是有效的。
但是如果我想按日期类型的自定义字段 closing_date 排序,在 ACF 排序文档中建议我应该这样做:
<?php $args = array(
'posts_per_page' => 7,
'offset' => 0,
'category' => '',
'category_name' => '',
'orderby' => 'meta_value_num',
'order' => 'asc',
'include' => '',
'exclude' => '',
'meta_key' => 'closing_date',
'meta_value' => '',
'post_type' => 'events',
'post_mime_type' => '',
'post_parent' => '',
'author' => '',
'post_status' => 'publish',
'suppress_filters' => 0
);
$my_posts_array = get_posts( $args );
这是行不通的。更新 - 我设法让这个东西工作。我没有改变任何东西,经过几次测试它起作用了....
有人可以回答这些问题中的任何一个(或所有)吗?
- 在wordpress中有两个自定义字段的方法是什么,你想要
按一个排序并按另一个筛选?
- 这是否可以在 get_posts 的一次调用中实现,或者是否有任何其他
原生 wp 技术?
- get_posts可以在同一个地方有meta_key、meta_value和meta_query吗
get_posts?
的参数列表
我还想补充一点,我正在使用 en 和 fr 两种语言的 WPML 翻译插件。
好的,
我设法自己回答了这个问题。
1. 这是一种方法:
<?php $args = array(
'posts_per_page' => 7,
'offset' => 0,
'category' => '',
'category_name' => '',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'include' => '',
'exclude' => '',
'meta_key' => 'closing_date',
'meta_value' => '',
'post_type' => 'events',
'post_mime_type' => '',
'post_parent' => '',
'author' => '',
'post_status' => 'publish',
'meta_query' => array(
array('key' => 'is_event',
'value' => 'a:1:{i:0;s:4:"true";}'
)
),
'suppress_filters' => 0
);
$my_posts_array = get_posts( $args );
2。我假设您可以使用 WP_Query 以类似的方式完成此操作,因为 get_posts 我实际上使用了此方法。
3.Answer 就像上面的例子一样。
查询的写法是
$my_posts_array = get_posts( array(
'post_type' => 'events',
'posts_per_page' => '7',
'offset' => 0,
'post_status' => 'publish',
'suppress_filters' => 0,
'meta_query' => array(
array(
'key' => 'is_event',
'value' => 'a:1:{i:0;s:4:"true";}',
'compare' => '='
)
),
'orderby' => 'meta_value_num',
'meta_key' => 'closing_date',
'order' => 'ASC',
)
);
2.Yes 这可以在一次调用中尝试上面的代码,或者如果不成功,那么试试这个。
$my_posts_array = get_posts( array(
'post_type' => 'events',
'posts_per_page' => '7',
'offset' => 0,
'post_status' => 'publish',
'suppress_filters' => 0,
'meta_query' => array(
array(
'key' => 'is_event',
'value' => 'a:1:{i:0;s:4:"true";}',
'compare' => '='
)
),
)
);
// The Loop
foreach ($my_posts_array as $key => $value) {
$allowed_posts[] = get_the_ID();
}
$sorted_array = get_posts( array(
'post_type' => 'events',
'posts_per_page' => '7',
'offset' => 0,
'post_status' => 'publish',
'suppress_filters' => 0 ,
'post__in' => $allowed_posts,
'orderby' => 'meta_value_num',
'meta_key' => 'closing_date',
'order' => 'ASC',
);
foreach ($sorted_array as $key => $value) {
//do the stuff here
}
我有两个使用高级自定义字段创建的自定义字段。 一种是复选框类型 (isEvent),另一种是日期类型 (closing_date)。 如果我想获得所有作为事件的帖子,我会做这样的事情
<?php $args = array(
'posts_per_page' => 7,
'offset' => 0,
'category' => '',
'category_name' => '',
'orderby' => '',
'order' => '',
'include' => '',
'exclude' => '',
'meta_key' => 'is_event',
'meta_value' => 'a:1:{i:0;s:4:"true";}',
'post_type' => 'events',
'post_mime_type' => '',
'post_parent' => '',
'author' => '',
'post_status' => 'publish',
'suppress_filters' => 0
);
$my_posts_array = get_posts( $args );
这是有效的。 但是如果我想按日期类型的自定义字段 closing_date 排序,在 ACF 排序文档中建议我应该这样做:
<?php $args = array(
'posts_per_page' => 7,
'offset' => 0,
'category' => '',
'category_name' => '',
'orderby' => 'meta_value_num',
'order' => 'asc',
'include' => '',
'exclude' => '',
'meta_key' => 'closing_date',
'meta_value' => '',
'post_type' => 'events',
'post_mime_type' => '',
'post_parent' => '',
'author' => '',
'post_status' => 'publish',
'suppress_filters' => 0
);
$my_posts_array = get_posts( $args );
这是行不通的。更新 - 我设法让这个东西工作。我没有改变任何东西,经过几次测试它起作用了....
有人可以回答这些问题中的任何一个(或所有)吗?
- 在wordpress中有两个自定义字段的方法是什么,你想要 按一个排序并按另一个筛选?
- 这是否可以在 get_posts 的一次调用中实现,或者是否有任何其他 原生 wp 技术?
- get_posts可以在同一个地方有meta_key、meta_value和meta_query吗 get_posts? 的参数列表
我还想补充一点,我正在使用 en 和 fr 两种语言的 WPML 翻译插件。
好的, 我设法自己回答了这个问题。 1. 这是一种方法:
<?php $args = array(
'posts_per_page' => 7,
'offset' => 0,
'category' => '',
'category_name' => '',
'orderby' => 'meta_value_num',
'order' => 'ASC',
'include' => '',
'exclude' => '',
'meta_key' => 'closing_date',
'meta_value' => '',
'post_type' => 'events',
'post_mime_type' => '',
'post_parent' => '',
'author' => '',
'post_status' => 'publish',
'meta_query' => array(
array('key' => 'is_event',
'value' => 'a:1:{i:0;s:4:"true";}'
)
),
'suppress_filters' => 0
);
$my_posts_array = get_posts( $args );
2。我假设您可以使用 WP_Query 以类似的方式完成此操作,因为 get_posts 我实际上使用了此方法。 3.Answer 就像上面的例子一样。
查询的写法是
$my_posts_array = get_posts( array(
'post_type' => 'events',
'posts_per_page' => '7',
'offset' => 0,
'post_status' => 'publish',
'suppress_filters' => 0,
'meta_query' => array(
array(
'key' => 'is_event',
'value' => 'a:1:{i:0;s:4:"true";}',
'compare' => '='
)
),
'orderby' => 'meta_value_num',
'meta_key' => 'closing_date',
'order' => 'ASC',
)
);
2.Yes 这可以在一次调用中尝试上面的代码,或者如果不成功,那么试试这个。
$my_posts_array = get_posts( array(
'post_type' => 'events',
'posts_per_page' => '7',
'offset' => 0,
'post_status' => 'publish',
'suppress_filters' => 0,
'meta_query' => array(
array(
'key' => 'is_event',
'value' => 'a:1:{i:0;s:4:"true";}',
'compare' => '='
)
),
)
);
// The Loop
foreach ($my_posts_array as $key => $value) {
$allowed_posts[] = get_the_ID();
}
$sorted_array = get_posts( array(
'post_type' => 'events',
'posts_per_page' => '7',
'offset' => 0,
'post_status' => 'publish',
'suppress_filters' => 0 ,
'post__in' => $allowed_posts,
'orderby' => 'meta_value_num',
'meta_key' => 'closing_date',
'order' => 'ASC',
);
foreach ($sorted_array as $key => $value) {
//do the stuff here
}