WP APIでこれを行うことで、更新について少し答えます。APIには、コアと同様にWP_Queryを使用する可能性がありますが、URLのgetパラメーターについてです。
投稿ステータスからコンテンツをプルする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;
}
これで、このようなRESTfulな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
この回答に基づくメタクエリの更新。