如何过滤在 Wordpress API v2 中特定日期后修改的帖子
How to filter posts modified after specific date in Wordpress API v2
我正在尝试通过 WordPress REST API 2.0-beta15
和 WordPress v4.8.3
获取(过滤)特定日期后修改的帖子,并使用我的客户端应用程序中的现有帖子更新它.
使用 WordPress 提供的 after
和 before
查询参数,我可以根据 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 as mentioned in this issue,但是这个 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&field=modified&_envelope
参考文献:
https://developer.wordpress.org/rest-api/reference/posts/#list-posts
https://codex.wordpress.org/Class_Reference/WP_Query?#Date_Parameters
好像不支持,略过docs
这里有一些解决方法:
1)自定义modified_after
rest查询参数
我们可以为 post
post 类型添加 modified_after
rest 查询参数:
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;
} );
然后相应地修改其余 post 查询:
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 );
我们让 after
优先于 modified_after
。
示例:
/wp-json/wp/v2/posts??modified_after=2017-11-07T00:00:00
备注:
我们可能对 post_modified_gmt
列使用了 modified_gmt_after
。
最好使用比 modified_after
更独特的名称,以避免将来可能发生的名称冲突。
要将此扩展到其他 post 类型,我们可以使用 rest_{$post_type}_collection_params
和 rest_{$post_type}_query
过滤器。
另一种选择是创建自定义端点和参数,这需要做更多的工作。是否应该在当前rest api 中添加自定义参数当然是个问题。在某些情况下应该没问题,因为我们没有删除或修改响应,也没有更改其他参数的工作方式。
2)自定义date_query_column
rest查询参数
另一种方法是引入自定义 date_query_column
rest 查询参数:
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;
} );
如果设置了 after
或 before
参数,那将可用。
示例:
/wp-json/wp/v2/posts??after=2017-11-07T00:00:00&date_query_column=post_modified
希望对您有所帮助!
我制作了一个WordPress插件WP REST API – Filter posts date wise using given column,有需要的可以使用。
使用这个插件我们可以指定列(date
、date_gmt
、modified
、modified_gmt
中的任何一个)作为查询参数date_query_column
进行查询针对 before
and/or after
查询参数中给出的值。
用法
在任何 post 端点上使用 date_query_column
参数,例如 /wp/v2/posts
或 /wp/v2/pages
与 before
and/or after
参数.
/wp-json/wp/v2/posts??after=2017-11-08T13:07:09&date_query_column=modified
原生支持 - WordPress 5.7
从 WordPress 5.7 开始,添加了对 post 修改日期而非发布日期查询的支持。不再需要自定义解决方法。
用法:
/wp-json/wp/v2/posts??modified_after=2021-01-01T00:00:00Z
备注:https://make.wordpress.org/core/2021/02/23/rest-api-changes-in-wordpress-5-7/
我正在尝试通过 WordPress REST API 2.0-beta15
和 WordPress v4.8.3
获取(过滤)特定日期后修改的帖子,并使用我的客户端应用程序中的现有帖子更新它.
使用 WordPress 提供的 after
和 before
查询参数,我可以根据 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 as mentioned in this issue,但是这个 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&field=modified&_envelope
参考文献:
https://developer.wordpress.org/rest-api/reference/posts/#list-posts https://codex.wordpress.org/Class_Reference/WP_Query?#Date_Parameters
好像不支持,略过docs
这里有一些解决方法:
1)自定义modified_after
rest查询参数
我们可以为 post
post 类型添加 modified_after
rest 查询参数:
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;
} );
然后相应地修改其余 post 查询:
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 );
我们让 after
优先于 modified_after
。
示例:
/wp-json/wp/v2/posts??modified_after=2017-11-07T00:00:00
备注:
我们可能对 post_modified_gmt
列使用了 modified_gmt_after
。
最好使用比 modified_after
更独特的名称,以避免将来可能发生的名称冲突。
要将此扩展到其他 post 类型,我们可以使用 rest_{$post_type}_collection_params
和 rest_{$post_type}_query
过滤器。
另一种选择是创建自定义端点和参数,这需要做更多的工作。是否应该在当前rest api 中添加自定义参数当然是个问题。在某些情况下应该没问题,因为我们没有删除或修改响应,也没有更改其他参数的工作方式。
2)自定义date_query_column
rest查询参数
另一种方法是引入自定义 date_query_column
rest 查询参数:
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;
} );
如果设置了 after
或 before
参数,那将可用。
示例:
/wp-json/wp/v2/posts??after=2017-11-07T00:00:00&date_query_column=post_modified
希望对您有所帮助!
我制作了一个WordPress插件WP REST API – Filter posts date wise using given column,有需要的可以使用。
使用这个插件我们可以指定列(date
、date_gmt
、modified
、modified_gmt
中的任何一个)作为查询参数date_query_column
进行查询针对 before
and/or after
查询参数中给出的值。
用法
在任何 post 端点上使用 date_query_column
参数,例如 /wp/v2/posts
或 /wp/v2/pages
与 before
and/or after
参数.
/wp-json/wp/v2/posts??after=2017-11-08T13:07:09&date_query_column=modified
原生支持 - WordPress 5.7
从 WordPress 5.7 开始,添加了对 post 修改日期而非发布日期查询的支持。不再需要自定义解决方法。
用法:
/wp-json/wp/v2/posts??modified_after=2021-01-01T00:00:00Z
备注:https://make.wordpress.org/core/2021/02/23/rest-api-changes-in-wordpress-5-7/