Я дам вам невелику відповідь на ваше оновлення, роблячи це за допомогою WP API . API має можливість використовувати WP_Query, як і в ядрі, але про параметри отримання в 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 таким спокійним, щоб імітувати фільтр публікацій 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
Оновлення мета запиту на основі цієї відповіді .