Wie erhalten Sie Beiträge von Meta-Abfrage mit dem JSON-API-Plugin?

Ich möchte Post mit einer API-Methode mit einer Art Meta-Abfrage erhalten. Ich habe 2 benutzerdefinierte Felder “Ort” und “Dayoweek” und ich möchte über API-Aufruf alle Post abrufen, die einige Werte für diese 2 Felder haben. Es würde mehr oder weniger so, wenn Sie PHP verwenden

$args = array( 'numberposts' => -1, 'post_type' => 'event', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'place', 'value' => 'Melbourne', ), array( 'key' => 'dayoweek', 'value' => 'saturday', ) ) ); 

Mein Problem ist..wie machst du das mit der JSON API Get Posts Methode? Wie machst du diesen Aufruf mit Arrays ..

 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 

Solutions Collecting From Web of "Wie erhalten Sie Beiträge von Meta-Abfrage mit dem JSON-API-Plugin?"

Die Lösung besteht hier aus zwei Teilen.

  1. Sie müssen einen benutzerdefinierten JSON-API-Controller verwenden
  2. In Ihrem benutzerdefinierten Controller müssen Sie entscheiden, wie die meta_query Datenstruktur übergeben wird

Je nachdem, wie robust Sie dies benötigen, können Sie verschiedene Ansätze verwenden. Hier ist der maximalistische Ansatz, der jede Art von meta_query , die die Struktur als JSON-String codiert.

 < ?php // 1. The class name must match the filename (ie, "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) ); } } ?> 

Wenn Sie also diese meta_querymeta_query als URL-codiertes JSON übergeben möchten:

 $args = array( 'numberposts' => -1, 'post_type' => 'event', 'meta_query' => array( 'relation' => 'AND', array( 'key' => 'place', 'value' => 'Melbourne' ), array( 'key' => 'dayoweek', 'value' => 'saturday' ) ) ); 

Codiere es so, in JavaScript:

 var meta_query = encodeURIComponent(JSON.stringify({ relation: 'AND', 0: { key: 'place', value:'Melbourne' }, 1: { key: 'dayoweek', value: 'saturday' } })); 

So würde das als URL-Abfrageparameter aussehen (etwas unhandlich): /?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

Ich finde einen einfachen Weg, dies zu tun (für mich), indem Sie die Parameter, die Sie auf Ihrem Controller benötigen, direkt auf die Abfrage setzen.

 $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'], ) ) ); 

Dann sieht die URL wie json=example/get_posts_by_meta_query&place=Toronto&dayoweek=saturday aus: json=example/get_posts_by_meta_query&place=Toronto&dayoweek=saturday

Entschuldigung Wenn es so aussieht, als ob ich meine Frage automatisch beantworte, mache ich es nur für den Fall, dass jemand eine andere Möglichkeit haben möchte, das zu tun.