Javascript WordPress Rest API:按自定义字段值筛选帖子
我已经在WordPress中创建了自己的自定义API端点。我使用它从一些自定义帖子类型中获取一些数据,以便Vue.js使用。每个自定义帖子都是一个事件,其中包含一个高级自定义字段,该字段保存该事件的日期(event_date)。我希望能够根据事件的日期(特别是年份)检索事件 我是否可以在终点添加一个过滤器,只允许我根据事件事件日期获取特定年份的事件?这必须是动态的,因为用户将能够在前端更改年份 差不多Javascript WordPress Rest API:按自定义字段值筛选帖子,javascript,ajax,wordpress,wordpress-rest-api,Javascript,Ajax,Wordpress,Wordpress Rest Api,我已经在WordPress中创建了自己的自定义API端点。我使用它从一些自定义帖子类型中获取一些数据,以便Vue.js使用。每个自定义帖子都是一个事件,其中包含一个高级自定义字段,该字段保存该事件的日期(event_date)。我希望能够根据事件的日期(特别是年份)检索事件 我是否可以在终点添加一个过滤器,只允许我根据事件事件日期获取特定年份的事件?这必须是动态的,因为用户将能够在前端更改年份 差不多 /wordpress/wp-json/custom-routes/v1/events?even
/wordpress/wp-json/custom-routes/v1/events?event_date=2020
functions.php
//api endpoint event lists
add_action('rest_api_init', function() {
register_rest_route('custom-routes/v1', 'events', array(
'methods' => 'GET',
'callback' => 'get_events_data',
) );
});
// event list api endpoint output
function get_events_data() {
$args = array(
'post_type' => 'events',
'posts_per_page' => -1
);
$query = new WP_Query( $args );
if( $query->have_posts() ):
while( $query->have_posts() ): $query->the_post();
$postID = get_the_id();
$blog_data[] = array(
"title" => get_the_title(),
'event_location' => get_field('event_location', $postID),
"event_date" => get_field('event_date', $postID),
"event_speaker" => get_field('event_speaker', $postID),
"permalink" => get_the_permalink(),
);
endwhile;
endif;
wp_reset_postdata();
return $blog_data;
}
js:
api输出:
[
{
title: "Event Four",
event_date: "May 30, 2021",
},
{
title: "Event Three",
event_date: "July 16, 2020",
},
{
title: "Event Two",
event_date: "May 11, 2021",
},
{
title: "Event One",
event_date: "May 24, 2020",
}
]
您可以按meta进行筛选,如本例中所示
function get_events_data($data)
{
$args = array(
'post_type' => 'events',
'posts_per_page' => -1,
'meta_key' => 'event_date',
'meta_value' => $data['year']
);
$query = new WP_Query($args);
.....
}
然后更改路由器注册,如下所示:
add_action('rest_api_init', function () {
register_rest_route('custom-routes/v1', 'events(?:/(?P<year>\d+))?', array(
'methods' => 'GET',
'callback' => 'get_events_data',
'args' => [
'year'
],
));
});
添加操作('rest\u api\u init',函数(){
寄存器\u rest\u route('custom-routes/v1','events(?:/(?P\d+)'),数组(
'方法'=>'获取',
“回调”=>“获取事件数据”,
“args'=>[
“年”
],
));
});
add_action('rest_api_init', function () {
register_rest_route('custom-routes/v1', 'events(?:/(?P<year>\d+))?', array(
'methods' => 'GET',
'callback' => 'get_events_data',
'args' => [
'year'
],
));
});