Intereting Posts
Как создать петлю сетки бутстрапа? Разрешить пользователю доступ только к панели мониторинга! Как использовать разбиение на страницы в WordPress? Отображать статьи, связанные с настраиваемым полем на странице Как заказывать сообщения по количеству Vimeo Likes Orderby изменен только для определенных типов сообщений Есть ли возможность разрешить редактирование только ранее существовавших страниц? Если нет, это хороший способ реализовать это? CSS – условное значение поля Как отображать таксономические термины, как они иерархичны Страница автора, не отображающая метаданные для всех пользователей Плагин пользовательского входа Переадресация на wp-login.php После миграции сайта Масштабирование базы данных WordPress с точки зрения кода Добавить фильтр в список Admin для всех пользовательских типов сообщений по их пользовательским таксономии Как я могу абстрагировать код из шаблона с помощью functions.php Мои веб-сайты WordPress всегда под угрозой

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

Мне нужно показать популярные и последние сообщения на другом веб-сайте 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 ); 

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

Я дам вам небольшой ответ на ваше обновление, сделав это с помощью WP API . API имеет возможность использовать WP_Query, как и в ядре, но о параметрах 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-Query по умолчанию. Но вы можете использовать hook для улучшения 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 таким же спокойным, чтобы имитировать фильтр сообщений 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 

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