Показывать популярную публикацию на другом веб-сайте php через API WP REST JSON
Мне нужно показать популярные и последние сообщения на другом веб-сайте PHP под тем же доменом.
Пример:
-
www.example.com
-> основной веб-сайт (php, mysql) -
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 );
Как я могу это сделать?
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
Обновление мета-запроса на основе этого ответа.