首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WordPress Rest API :按自定义字段值过滤帖子

WordPress Rest API :按自定义字段值过滤帖子
EN

Stack Overflow用户
提问于 2020-05-16 18:59:24
回答 1查看 852关注 0票数 0

我已经在WordPress中创建了自己的自定义API端点。我使用它从一些自定义帖子类型中获取一些数据,以供Vue.js使用。这些自定义帖子中的每一个都是具有高级自定义字段的事件,其中包含该事件的日期(event_date)。我希望能够检索基于其日期的事件,特别是年份。

有没有什么办法可以给我的端点添加一个过滤器,让我只能根据events event_date获取特定年份的事件?这将必须是动态的,因为用户将能够在前端更改年份。

就像这样

代码语言:javascript
复制
/wordpress/wp-json/custom-routes/v1/events?event_date=2020

functions.php

代码语言:javascript
复制
    //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:

代码语言:javascript
复制
$.ajax({
    url: '/wordpress/wp-json/custom-routes/v1/events',
    error = (res) => {
        console.log(res);
    },
    success = (res) => {
        console.log(res);
    }
});

接口输出:

代码语言:javascript
复制
[
{
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",
}
]
EN

回答 1

Stack Overflow用户

发布于 2020-05-16 19:34:17

您可以按元过滤,如本例所示。

代码语言:javascript
复制
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);

    .....
}

然后按如下方式更改您的路由器注册:

代码语言:javascript
复制
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'
        ],
    ));
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61835686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档