2017-03-03 6 views
-1

Ich verwende JSON-API Plugin für WordPress und ich erstelle einen benutzerdefinierten Controller, der eine Liste der Beiträge von einem Beitragstyp zurückgibt. Der Ausgang ich will, ist so etwas wie diese:Ausgabe JSON für WordPress-Beiträge

[{ 
    "id": 1, 
    "title": "Sample Post Title" 
}, 
{ 
    "id": 2, 
    "title": "Sample Post Title" 
}, 
.... 
] 

hier ist mein benutzerdefinierter Controller:

class JSON_API_Custom_Controller { 

public function get_posts_type() { 
    global $json_api; 

    $posts_all  = array(); 

    $args = array('post_type' => 'shopping', 'posts_per_page' => -1); 
    $loop = new WP_Query($args); 
    if ($loop->have_posts()) { 
     while ($loop->have_posts()) : $loop->the_post(); 
     $post_id = get_the_ID(); 
     $post_title = get_the_title($post_id); 

     $posts_all []= array(
     'id' => $post_id, 
     'title' => $post_title 
     ); 

     endwhile; 
    } 

    return $posts_all; 

    } 

} 

aber die Ausgabe ist:

{ 
    "status":"ok", 
    "0":{ 
     "id":1, 
     "title":"sample title" 
    }, 
    "1":{ 
     "id":2, 
     "title":"sample title" 
    } 
} 

wie kann ich Ausgang der json Array von Objekten wie die gewünschte Ausgabe?

+0

Wow scheint wie Down Vote Kerl ist hier unten abstimmen alles ohne Grund! –

Antwort

-1

Ich nehme an, status:ok zu JSON Antwort hinzufügen ist eine Funktion eines Plugins.

So können Sie ändern Sie Funktion ein Array mit einem Schlüssel zurück:

// not this 
//return $posts_all; 

// but this 
return array('posts' => $posts_all); 

Danach werden Sie noch status Schlüssel in Ihrer json Antwort haben, sondern auch Sie posts Schlüssel haben, dass Sie kann über iterieren.

Update: Ich nehme an, der Filter json_api_encode kann Ihnen helfen. Sie können dort status Schlüssel unset:

add_filter('json_api_encode', 'remove_status'); 

function remove_status($response) { 
    unset($response['status']); 

    return $response; 
} 
+0

die API gibt tatsächlich die codierte JSON zurück, ich muss nur sicherstellen, dass es in der richtigen Form ist. Kann ich "ok" und "posts" trotzdem entfernen? –

+1

Nachdem ich ein Handbuch gelesen habe, finde ich einen Weg. Siehe das Update. –

+0

genial :) vielen Dank für die Dokumentation, um eine Lösung für das Problem zu finden. Nicht sicher, warum jemand die Frage und alle Antworten abwählte, aber ich markierte die Antwort als die Antwort :) –

-1

Hoffe, dass die folgenden Code wird das für Sie tun.

return json_encode($posts_all); 

, dass „Status“ zu erhalten, wie in Beispiel Ausgabe, müssen Sie das gleiche in Ihrem Code hinzuzufügen.

+0

Die API gibt tatsächlich den codierten JSON zurück, es gibt keine Notwendigkeit dafür –

+0

Regen, Bitte gehen Sie durch den Code, hoffe Sie kann verstehen, was ich Ihnen zu sagen versuche, 123, 'post_title' => 'test'); $ arr [1] = Array ('id' => 124, 'post_title' => 'test1'); echo json_encode ($ arr); ?> – Tristup