如何过滤Wordpress API v2中特定日期之后修改的帖子

Vig*_*dar 4 wordpress wp-api wordpress-rest-api

我试图通过WordPress REST API 2.0-beta15和WordPress 获取(过滤)特定日期后修改的帖子v4.8.3,并使用我的客户端应用程序中的现有帖子进行更新.

使用afterbefore查询WordPress提供的参数我可以基于date而不是modified字段来过滤帖子.

我已尝试/wp-json/wp/v2/posts?filter[date_query][0][column]=post_modified_gmt&filter[date_query][0][after]=1+month+ago使用此问题中提到的https://github.com/WP-API/rest-filter,但此过滤器现在也无法正常工作.date_query

我需要任何选择

http://bankersdaily.in/wp-json/wp/v2/posts?modified_after=2017-10-31T13:32:10&_envelope http://bankersdaily.in/wp-json/wp/v2/posts?after=2017 -10-31T13:32:10&字段=修饰_envelope

参考文献:

https://developer.wordpress.org/rest-api/reference/posts/#list-posts https://codex.wordpress.org/Class_Reference/WP_Query?#Date_Parameters

Nat*_*son 11

本机支持 - WordPress 5.7

从 WordPress 5.7 开始,添加了对按帖子修改日期而不是发布日期进行查询的支持。不再需要自定义解决方法。

用法:

/wp-json/wp/v2/posts?modified_after=2021-01-01T00:00:00Z
Run Code Online (Sandbox Code Playgroud)

注意:https://make.wordpress.org/core/2021/02/23/rest-api-changes-in-wordpress-5-7/


bir*_*ire 8

看起来它不受支持,浏览文档

以下是一些解决方法:

1)自定义modified_after休息查询参数

我们可以modified_afterpost帖子类型添加其余查询参数:

add_filter( 'rest_post_collection_params', function( $query_params ) {
    $query_params['modified_after'] = [
        'description' => __( 'Limit response to posts published after a given ISO8601 compliant date.' ),
        'type'        => 'string',
        'format'      => 'date-time',
    ];
    return $query_params;
} );
Run Code Online (Sandbox Code Playgroud)

然后相应地修改其余的帖子查询:

add_filter( 'rest_post_query', function( $args, $request ) {
    if( isset( $request['modified_after'] ) && ! isset( $request['after'] ) ) {
        $args['date_query'][0]['after'] = $request['modified_after'];
        $args['date_query'][0]['column'] = 'post_modified';
    }
    return $args;
}, 10, 2 );
Run Code Online (Sandbox Code Playgroud)

在哪里我们after优先考虑modified_after.

例:

/wp-json/wp/v2/posts??modified_after=2017-11-07T00:00:00
Run Code Online (Sandbox Code Playgroud)

笔记:

我们可能已用于modified_gmt_afterpost_modified_gmt列.

使用更独特的名称modified_after可能比避免将来可能发生名称冲突更好.

要将其扩展到其他帖子类型,我们可以使用rest_{$post_type}_collection_paramsrest_{$post_type}_query过滤器.

另一种选择是创建自定义端点和参数,这是一项更多的工作.这当然是一个问题,我们是否应该为当前的休息api添加自定义参数.在某些情况下应该没问题,因为我们没有删除或修改响应,也没有改变其他参数的工作方式.

2)自定义date_query_column休息查询参数

另一种方法是引入自定义date_query_column休息查询参数:

add_filter( 'rest_post_query', function( $args, $request ) {
    if ( ! isset( $request['before'] ) && ! isset( $request['after'] ) )
        return $args;

    if( isset( $request['date_query_column'] ) )
        $args['date_query'][0]['column'] = $request['date_query_column'];

    return $args;
}, 10, 2 );

add_filter( 'rest_post_collection_params', function( $query_params ) {
    $query_params['date_query_column'] = [
            'description' => __( 'The date query column.' ),
            'type'        => 'string',
            'enum'        => [ 'post_date', 'post_date_gmt', 'post_modified', 'post_modified_gmt', 'comment_date', 'comment_date_gmt' ],
        ];
    return $query_params;
} );
Run Code Online (Sandbox Code Playgroud)

如果设置了参数afterbefore参数,则可用.

例:

/wp-json/wp/v2/posts??after=2017-11-07T00:00:00&date_query_column=post_modified
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!