Mostrar publicaciones populares en otro sitio web de php a través de WP REST JSON API

9

Necesito mostrar publicaciones populares y recientes en otro sitio web de PHP bajo el mismo dominio.

Ejemplo:

  1. www.example.com -> sitio web principal (php, mysql)
  2. www.example.com/blog -> blog de WordPress

Necesita mostrar publicaciones populares y recientes de blog en el sitio web principal.

Tenga en cuenta que el blog y el sitio web principal utilizan dos bases de datos separadas.

Decidí usar el complemento WP REST JSON API para eso. Ahora tengo una pregunta diferente.

Utilizo el siguiente código para recuperar la publicación popular de la semana pasada. Lo que realmente necesito es obtener estos mismos datos a través de una llamada API.

$args = array(
    'date_query' => array( array( 'after' => '1 week ago' ) ),  
    'posts_per_page' => $recent_posts_count,
    'ignore_sticky_posts' => 1,
    'meta_key' => 'post_views_count',
    'orderby' => 'meta_value_num',
    'order' => 'DESC'
);
$popularposts = new WP_Query( $args );

¿Cómo puedo hacer eso?

Janith Chinthana
fuente
Esto se ha pedido muchas veces. Por favor use la búsqueda.
kraftner
1. Si tiene una nueva pregunta, abra una nueva pregunta. En este caso, podría estar bien, ya que no es totalmente nuevo. De todos modos, el título es engañoso ahora. 2. Has visto la documentación: wp-api.org
kraftner
También he actualizado el título, sin embargo,
revisaré

Respuestas:

8

Le daré una pequeña respuesta a su actualización, haciendo esto con la API de WP . La API tiene la posibilidad de usar WP_Query como también en core, pero acerca de los parámetros get en la url.

Una URL para extraer contenido del estado de publicación se vería así:

http://example.com/wp-json/posts

Para extraer contenido con los parámetros WP_Query a los que está acostumbrado, puede hacerlo así:

http://example.com/wp-json/posts?filter[posts_per_page]=2&filter[order]=ASC

Puede crear su consulta personalizada con todos los parámetros también en la url. Puede ver cómo el método para obtener esos datos le resulta familiar WP_Querypara un bucle estándar de WordPress. Si no especifica un parámetro, WP_Queryse utilizarán los valores predeterminados para .

El resultado es json, que puede analizar y usar para su sitio externo.

Consulte también el sitio de la API para obtener más parámetros y documentación.

Actualización para date_query

La API no puede crear un resultado para una consulta como query_date. Consulte la documentación para todos los parámetros posibles.

Pero la nueva versión se lanzará en días, semanas. Y vea este tema para discutir sobre una solución para esta consulta de fecha. Alternativa use un filtro personalizado a través del gancho, como:

// Allow datequery in /posts filter
add_filter( "json_query_vars", function( $query_args ) {
    return array_merge( $query_args, 
        array( "date_query" => array( array( "after" => "1 week ago" ) ) )
    );
} );

Actualización para meta_query

La API no puede también esta característica de la consulta WP predeterminada. Pero puede usar un gancho para mejorar la API a este requisito. También aquí un pequeño ejemplo.

add_filter('json_query_var-meta_query', 'add_meta_query', 10, 1);

function add_meta_query( $data ){

    $args = array();
    $args['relation'] = 'AND';

    foreach ( $data as $key => $value ) {
        if ( 'relation' === $key ) {
            $args['relation'] = $data['relation'];
        }

        if ( substr($key, 0, 3) === 'key' ) {
            $arg_num = substr( $key, 3 );
            $args[ (int) $arg_num ][ 'key' ] = $value;
        }

        if (  substr( $key, 0, 7 ) === 'compare' ) {
            $arg_num_comp = substr( $key, 7 );
            $args[ (int) $arg_num_comp ][ 'compare' ] = $value;
        }
    }

    return $args;
}

Ahora, puedo llamar a JSON de manera tranquila para imitar el filtro de publicaciones Wp_query que ya está en el servidor:

?filter[meta_query][key]=_newsml_categories_newsstream&filter[meta_query][key2]=homepage&filter[meta_query][relation]=AND&filter[meta_query][compare]=NOT%20EXISTS&filter[meta_query][compare2]=NOT%20EXISTS

La actualización de la meta consulta basada en esta respuesta .

bueltge
fuente
¿Tiene alguna idea de cómo convertir la línea 'date_query' => array( array( 'after' => '1 week ago' ) ), como una cadena de consulta
Janith Chinthana
Me gustaría aceptar esto como una respuesta, sin embargo, si tiene alguna idea sobre el comentario anterior, puede compartir sus pensamientos.
Janith Chinthana
los filtros que no sean filter[posts_per_page]=2&filter[order]=ASCestos dos no funcionan, por lo que siempre da solo publicaciones recientes
Janith Chinthana
@JanithChinthana He probado nuevamente, el parámetro de filtro funciona bien. - Como ejemplo http://localhost/wpbeta/plugins/wp-json/posts?filter[posts_per_page]=1&filter[order]=ASC. Mucho más en mi actualización a continuación en la respuesta.
bueltge
gracias por la actualización, sí post_per_pagey orderestá funcionando, pero ¿qué pasa meta_key? ¿funciona con esto o necesito trabajo extra para eso?
Janith Chinthana