Показывать популярную публикацию на другом веб-сайте php через API WP REST JSON


Мне нужно показать популярные и последние сообщения на другом веб-сайте PHP под тем же доменом.

Пример:

  1. www.example.com -> основной веб-сайт (php, mysql)
  2. www.example.com/blog ->Блог WordPress

Необходимо показать популярные, последние сообщения блога на главном веб-сайте.

Пожалуйста, обратите внимание, что блог и основной веб-сайт используют две отдельные базы данных.

Я решил использовать для этого плагин WP REST JSON API . Теперь у меня другой вопрос.

Я использую следующий код для получения популярного поста на прошлой неделе. Что мне на самом деле нужно, так это получить эти же данные с помощью вызова 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 );

Как я могу это сделать?

Author: Ethan O'Sullivan, 2015-04-28

1 answers

Я дам вам небольшой ответ на ваше обновление, сделав это с помощью WP API. У API есть возможности использовать WP_Query, как и в core, но о параметрах get в URL.

URL-адрес для извлечения содержимого из статуса публикации будет выглядеть следующим образом:

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

Чтобы извлечь содержимое с помощью параметров WP_Query, к которым вы привыкли, вы можете сделать это следующим образом:

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

Вы можете создать свой пользовательский запрос со всеми параметрами также в URL-адресе. Вы можете видеть, как метод захвата этих данных кажется знакомым с использованием WP_Query для стандартного цикла WordPress. Если вы не укажете параметр, будут использоваться значения по умолчанию WP_Query.

Результатом является json, который вы можете проанализировать и использовать для своего внешнего сайта.

Смотрите также сайт API для получения дополнительных параметров и документации.

Обновление для date_query

API не может создать результат для запроса, подобного query_date. Смотрите документацию для всех возможных параметры.

Но новая версия выйдет в ближайшие дни, недели. И посмотрите Этот выпуск для обсуждения решения для этого запроса даты. В качестве альтернативы используйте пользовательский фильтр с помощью крючка, например:

// 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" ) ) )
    );
} );

Обновление для meta_query

API также не может использовать эту функцию WP-запроса по умолчанию. Но вы можете использовать крюк для улучшения API в соответствии с этим требованием. Также здесь небольшой пример.

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

Теперь я могу вызвать JSON restful таким образом, чтобы имитировать сообщения Wp_query фильтр уже на сервере:

?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

Обновление мета-запроса на основе этого ответа.

 8
Author: bueltge, 2017-04-13 12:37:38