Ich werde Ihnen eine kleine Antwort auf Ihr Update geben und dies mit der WP-API tun . Die API hat die Möglichkeit, die WP_Query wie auch im Core zu verwenden, jedoch über die get-Parameter in der URL.
Eine URL zum Abrufen von Inhalten aus dem Post-Status sieht folgendermaßen aus:
http://example.com/wp-json/posts
Gehen Sie folgendermaßen vor, um Inhalte mit den gewohnten WP_Query-Parametern abzurufen:
http://example.com/wp-json/posts?filter[posts_per_page]=2&filter[order]=ASC
Sie können Ihre benutzerdefinierte Abfrage mit allen Parametern auch in der URL erstellen. Sie können sehen, wie sich die Methode zum Abrufen dieser Daten WP_Query
für eine Standard-WordPress-Schleife vertraut anfühlt . Wenn Sie keinen Parameter angeben, werden die Standardeinstellungen WP_Query
verwendet.
Das Ergebnis ist json, das Sie analysieren und für Ihre externe Site verwenden können.
Weitere Parameter und Dokumentationen finden Sie auch auf der Website der API .
Update für date_query
Die API kann kein Ergebnis für eine Abfrage wie erstellen query_date
. In der Dokumentation finden Sie alle möglichen Parameter.
Aber die neue Version wird in Sicht Tagen, Wochen veröffentlicht. In diesem Problem finden Sie Informationen zu einer Lösung für diese Datumsabfrage. Alternativ können Sie einen benutzerdefinierten Filter über einen Haken verwenden, z.
// 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" ) ) )
);
} );
Update für meta_query
Die API kann diese Funktion der Standard-WP-Abfrage auch nicht verwenden. Sie können jedoch einen Hook verwenden, um die API an diese Anforderung anzupassen. Auch hier ein kleines Beispiel.
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;
}
Jetzt kann ich JSON so restful aufrufen, um den Wp_query-Posts-Filter nachzuahmen, der sich bereits auf dem Server befindet:
?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
Das Meta-Abfrage-Update basiert auf dieser Antwort .