Dam ci krótką odpowiedź na twoją aktualizację, robiąc to z WP API . Interfejsy API mają możliwość korzystania z WP_Query jak również w rdzeniu, ale o parametrach get w adresie URL.
Adres URL do pobierania treści ze statusu postu wygląda następująco:
http://example.com/wp-json/posts
Aby pobrać zawartość z parametrami WP_Query, do których jesteś przyzwyczajony, możesz to zrobić w następujący sposób:
http://example.com/wp-json/posts?filter[posts_per_page]=2&filter[order]=ASC
Możesz zbudować niestandardowe zapytanie ze wszystkimi parametrami również w adresie URL. Możesz zobaczyć, w jaki sposób metoda chwytania tych danych jest znana w WP_Query
przypadku standardowej pętli WordPress. Jeśli nie określisz parametru, WP_Query
zostaną użyte wartości domyślne .
Rezultatem jest json, który możesz przeanalizować i użyć dla swojej strony zewnętrznej.
Zobacz także stronę API, aby uzyskać więcej parametrów i dokumentacji.
Aktualizacja dla date_query
Interfejs API nie może utworzyć wyniku dla takiego zapytania query_date
. Zobacz dokumentację dla wszystkich możliwych parametrów.
Ale nowa wersja zostanie wydana w widoku dni, tygodnie. I zobacz ten problem, aby omówić rozwiązanie tego zapytania dotyczącego daty. Alternatywnie użyj niestandardowego filtra za pomocą haka, takiego jak:
// 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" ) ) )
);
} );
Aktualizacja dla meta_query
Interfejs API nie może również korzystać z tej funkcji domyślnego zapytania WP. Ale możesz użyć haka, aby ulepszyć API do tego wymagania. Również tutaj mały przykład.
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;
}
Teraz mogę zadzwonić do JSON w taki sposób, aby naśladować filtr wpisów Wp_query już na serwerze:
?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
Aktualizacja meta zapytania oparta na tej odpowiedzi .