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

9

Preciso mostrar postagens populares e recentes em outro site PHP sob o mesmo domínio.

Exemplo:

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

Precisa mostrar posts populares e recentes do blog no site principal.

Observe que o blog e o site principal usam dois bancos de dados separados.

Decidi usar o plugin WP REST JSON API para isso. Agora eu tenho uma pergunta diferente.

Eu uso o seguinte código 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 eu posso fazer isso?

Janith Chinthana
fonte
Isso já foi solicitado várias vezes. Por favor, use a pesquisa.
Kraftner # 28/15
1. Se você tiver uma nova pergunta, abra uma nova pergunta. Nesse caso, pode ser bom, pois não é totalmente novo. De qualquer forma, o título é enganoso agora. 2. Você viu a documentação: wp-api.org
kraftner
Eu atualizei o título, bem como, no entanto vou percorrer o doc, graças
janith Chinthana

Respostas:

8

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

Um URL para extrair conteúdo do Status da postagem ficaria assim:

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

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

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 de captura desses dados parece familiar para o uso WP_Queryem um loop padrão do WordPress. Se você não especificar um parâmetro, os padrões WP_Queryserão usados.

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

Consulte também o site da API para obter 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. Consulte a documentação para todos os parâmetros possíveis.

Mas a nova versão será lançada em exibição dias, semanas. E consulte este problema para discussão sobre uma solução para esta consulta de data. Alternativamente, 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 da WP-Query padrão. 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, eu posso chamar o JSON repousante assim para imitar o filtro de postagens 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 com base nesta resposta .

bueltge
fonte
Você tem alguma idéia de como converter a linha 'date_query' => array( array( 'after' => '1 week ago' ) ), como uma string de consulta
janith Chinthana
Gostaria de aceitar isso como resposta, no entanto, se você tem alguma idéia sobre o comentário acima, pode compartilhar seus pensamentos.
janith Chinthana
filtra diferente filter[posts_per_page]=2&filter[order]=ASCdeste dois não está funcionando, por isso está sempre dando posts recentes única
janith Chinthana
@JanithChinthana Eu testei novamente, o parâmetro do filtro funciona bem. - Como exemplo http://localhost/wpbeta/plugins/wp-json/posts?filter[posts_per_page]=1&filter[order]=ASC. Muito mais na minha atualização abaixo na resposta.
precisa saber é o seguinte
obrigado pela atualização, sim post_per_pagee orderestá funcionando, mas e quanto meta_key? funciona com isso ou preciso trabalhar extra para isso?
Janith Chinthana