Cómo filtrar publicaciones modificadas después de una fecha específica en WordPress API v2

5 minutos de lectura

avatar de usuario
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

avatar de usuario
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/

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.

¿Ha sido útil esta solución?