Vignesh Sundaramoorthy
Estoy tratando de obtener (filtrar) las publicaciones modificadas después de una fecha específica a través de la API REST de WordPress 2.0-beta15
y WordPress v4.8.3
y actualizar eso con las publicaciones existentes en mi aplicación de cliente.
Usando after
y before
parámetros de consulta proporcionados por WordPress Puedo filtrar publicaciones según date
en vez de modified
campo.
Yo he tratado /wp-json/wp/v2/posts?filter[date_query][0][column]=post_modified_gmt&filter[date_query][0][after]=1+month+ago
usando esto https://github.com/WP-API/rest-filter como se mencionó en este problemapero esto date_query
El filtro tampoco funciona ahora.
Necesito alguna opción como
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
Referencias:
https://developer.wordpress.org/rest-api/reference/posts/#list-posts
https://codex.wordpress.org/Class_Reference/WP_Query?#Date_Parameters
birgire
Parece que no es compatible, hojeando a través de la documentos
Aquí hay algunas soluciones:
1) personalizado modified_after
parámetro de consulta de descanso
Podemos agregar el modified_after
resto parámetro de consulta para el post
tipo de publicación con:
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;
} );
y luego modifique la consulta de publicación de resto en consecuencia con:
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 );
donde dejamos after
tener prioridad sobre modified_after
.
Ejemplo:
/wp-json/wp/v2/posts??modified_after=2017-11-07T00:00:00
Notas:
Podríamos haber usado modified_gmt_after
Para el post_modified_gmt
columna.
Sería mejor usar un nombre más único que modified_after
para evitar una posible colisión de nombres en el futuro.
Para extender esto a otros tipos de publicaciones, podemos usar el rest_{$post_type}_collection_params
y el rest_{$post_type}_query
filtros
Otra opción es crear un punto final y parámetros personalizados, eso es más trabajo que hacer allí. Por supuesto, es una pregunta si debemos agregar un parámetro personalizado a la API de descanso actual. En algunos casos, debería estar bien, ya que no eliminamos ni modificamos la respuesta, ni cambiamos el funcionamiento de otros parámetros.
2) personalizado date_query_column
parámetro de consulta de descanso
Otro enfoque sería introducir una costumbre date_query_column
parámetro de consulta de descanso:
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;
} );
que estaría disponible si after
o before
se establecen los parámetros.
Ejemplo:
/wp-json/wp/v2/posts??after=2017-11-07T00:00:00&date_query_column=post_modified
¡Espero eso ayude!
-
¿Puedo agregar lo anterior?
add_filter
código aquí github.com/WP-API/rest-filter/blob/master/plugin.php#L18 después de la bifurcación y usar ese complemento actualizado funcionará?– Vignesh Sundaramoorthy
7 de noviembre de 2017 a las 14:13
-
@VigneshSundar No recomendaría modificar el código central, en su lugar crear un complemento personalizado. De esa manera, no perderá las modificaciones cada vez que actualice el núcleo de WordPress.
– birgire
7 de noviembre de 2017 a las 14:17
-
Pero yo pienso resto-filtro no es parte de WP-API fusionado con el núcleo de WordPresses un complemento que podemos agregar por separado y la actualización de WordPress no afectará esto
– Vignesh Sundaramoorthy
7 de noviembre de 2017 a las 14:27
-
Mi enfoque fue sin ese complemento en mente. También evitaría modificar complementos de terceros por la misma razón. Estoy en el móvil ahora, así que lo comprobaré más tarde.
– birgire
7 de noviembre de 2017 a las 14:39
-
Gracias por la orientación, crearé un nuevo complemento, pero para su información, algunas palabras de la descripción del filtro de descanso recién ahora me vieron – ‘eliminado de la API cuando se fusionó con el núcleo de WordPress‘
– Vignesh Sundaramoorthy
7 de noviembre de 2017 a las 14:55
Soporte Nativo – WordPress 5.7
A partir de WordPress 5.7, se agregó soporte para consultar por la fecha de modificación de la publicación en lugar de la fecha de publicación. Ya no se requieren soluciones alternativas personalizadas.
Uso:
/wp-json/wp/v2/posts??modified_after=2021-01-01T00:00:00Z
Notas: https://make.wordpress.org/core/2021/02/23/rest-api-changes-in-wordpress-5-7/
-
aparentemente aún no está documentado: desarrollador.wordpress.org/rest-api/reference/posts
– Amit Mittal
6 de agosto de 2021 a las 12:11
He creado un plugin de WordPress WP REST API: filtre las publicaciones según la fecha usando la columna dadaaquellos que lo necesiten pueden usar esto.
Usando este complemento podemos especificar la columna (cualquiera de date
, date_gmt
, modified
, modified_gmt
) como parámetro de consulta date_query_column
para consultar contra los valores dados en before
y/o after
parámetros de consulta.
Uso
Utilizar el date_query_column
parámetro en cualquier punto final posterior, como /wp/v2/posts
o /wp/v2/pages
en combinación con before
y/o after
parámetro.
/wp-json/wp/v2/posts??after=2017-11-08T13:07:09&date_query_column=modified
Repositorio Github de lo mismo.