使用高级自定义字段筛选和排序wordpress get_posts
问题描述:
我有两个使用高级自定义字段创建的自定义字段。 一种是复选框(isEvent)类型,另一种是日期类型(closing_date)。 如果我想所有的事件的帖子,我会做这样的事情使用高级自定义字段筛选和排序wordpress get_posts
<?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在get_posts的参数列表中有相同的 参数列表中的meta_key,meta_value和meta_query吗?
我还想补充一点,我正在使用带有2种语言en和fr的WPML翻译插件。
答
编写查询的方式是
$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这是一个呼叫尝试上面的代码,或者如果没有woeking那么试试这个可能。
$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
}
答
好吧, 我设法自己回答这个问题。 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就像上面的例子一样。