Mostrar post popular em outro site php via WP REST API JSON

9

Eu preciso mostrar populares & posts recentes em outro site PHP no mesmo domínio.

Exemplo:

  1. www.example.com - > site principal (php, mysql)
  2. www.example.com/blog - > Blog WordPress

Precisa exibir postagens populares e recentes do blog no site principal.

Por favor, note que o blog e o site principal usam dois bancos de dados separados.

Eu decidi usar o plugin API WP REST JSON para isso. Agora eu tenho outra pergunta.

Eu uso o código a seguir para recuperar a postagem popular da semana passada. O que eu realmente preciso é obter esses mesmos dados via chamada de 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 );

Como posso fazer isso?

    
por Janith Chinthana 28.04.2015 / 12:14

1 resposta

8

Eu darei uma pequena resposta para sua atualização, fazendo isso com a API do WP . A API tem a possibilidade de usar o WP_Query como também no core, mas sobre os parâmetros get no URL.

Um URL para extrair conteúdo do status da postagem seria assim:

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

Para extrair conteúdo com os parâmetros WP_Query aos quais você está acostumado, você pode fazer assim:

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

Você pode criar sua consulta personalizada com todos os parâmetros também no URL. Você pode ver como o método para pegar esses dados parece familiar para usar WP_Query para um loop padrão do WordPress. Se você não especificar um parâmetro, os padrões para WP_Query serão usados.

O resultado é json, que você pode analisar e usar em seu site externo.

Veja também o site da API para mais parâmetros e documentação.

Atualização para date_query

A API não pode criar um resultado para uma consulta como query_date . Veja a documentação para todos os parâmetros possíveis.

Mas a nova versão será lançada em dias, semanas. E veja este problema para discussão sobre uma solução para esta consulta de data. Alternativa use um filtro personalizado via 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" ) ) )
    );
} );

Atualização para meta_query

A API também não pode esse recurso do padrão WP-Query. Mas você pode usar um gancho para aprimorar a API para esse requisito. Também aqui um pequeno exemplo.

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;
}

Agora, posso chamar o JSON tranquilo assim para imitar o filtro de mensagens do Wp_query já no 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

A atualização da meta-consulta baseada em esta resposta .

    
por bueltge 28.04.2015 / 15:46