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