一種のメタクエリを使ったAPIメソッドで投稿したいです。私は2つのカスタムフィールド "place"と "dayoweek"を持っていて、この2つのフィールドにいくつかの値を持つすべての投稿をAPI呼び出しで取得したいと思います。あなたがphpを使うなら、それは多かれ少なかれこのようになるでしょう
$args = array(
'numberposts' => -1,
'post_type' => 'event',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'place',
'value' => 'Melbourne',
),
array(
'key' => 'dayoweek',
'value' => 'saturday',
)
)
);
私の問題は、JSON APIのget postsメソッドを使用してどのように行うのですか?配列を使用してこの呼び出しをどのようにしますか。
http://somewebiste/API/get_posts/?post_type=event&meta_key=place&meta_value=andorra&cat=1&meta_key=dayoweek&meta_value=saturday&orderby=title&order=ASC
ここでの解決策には2つの部分があります。
meta_query
データ構造をどのように渡すかを決める必要があります。これをいかに堅牢にする必要があるかに応じて、さまざまな方法を使用できます。これが最大主義的アプローチで、これは any 種類のmeta_query
を許可し、構造をJSON文字列としてエンコードします。
<?php
// 1. The class name must match the filename (i.e., "foo.php" for JSON_API_Foo_Controller)
// 2. Save this in your themes folder
// 3. Activate your controller under Settings > JSON API
class JSON_API_Example_Controller {
public function get_posts_by_meta_query() {
global $json_api;
if (empty($_GET['meta_query'])) {
return array(
'error' => "Specify a 'meta_query' param."
);
}
$query = array(
'ignore_sticky_posts' => true,
'numberposts' => -1,
'post_type' => 'event',
'meta_query' => json_decode($_GET['meta_query'], true)
);
return array(
'posts' => $json_api->introspector->get_posts($query)
);
}
}
?>
そのため、このmeta_query
をURLエンコードされたJSONとして渡したい場合は、次のようにします。
$args = array(
'numberposts' => -1,
'post_type' => 'event',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'place',
'value' => 'Melbourne'
),
array(
'key' => 'dayoweek',
'value' => 'saturday'
)
)
);
JavaScriptでそのようにエンコードします。
var meta_query = encodeURIComponent(JSON.stringify({
relation: 'AND',
0: {
key: 'place',
value:'Melbourne'
},
1: {
key: 'dayoweek',
value: 'saturday'
}
}));
これは、URLクエリのパラメータとして表示される方法です(少し面倒です)。/?json=example/get_posts_by_meta_query&meta_query=%7B%220%22%3A%7B%22key%22%3A%22place%22%2C%22value%22%3A%22Melbourne%22%7D%2C%221%22%3A%7B%22key%22%3A%22dayoweek%22%2C%22value%22%3A%22saturday%22%7D%2C%22relation%22%3A%22AND%22%7D
私はあなたが直接あなたのコントローラに必要なパラメータを設定することによってそれをする簡単な方法を(私にとっては)見つけます。
$query = array(
'ignore_sticky_posts' => true,
'numberposts' => -1,
'post_type' => 'event',
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'place',
'value' => $_GET['place'],
),
array(
'key' => 'dayoweek',
'value' => $_GET['dayoweek'],
)
)
);
URLは次のようになります。json=example/get_posts_by_meta_query&place=Toronto&dayoweek=saturday
申し訳ありませんが、質問に自動回答しているように見える場合は、他の方法を希望する場合にのみ使用します。