2015-09-04 11 views
8

Wie kann ich alle Posts von einem bestimmten benutzerdefinierten Post-Typ mit WP REST API (entweder v1 oder v2) abrufen? Ich bin sehr neu und versuche zu verstehen, wie man das macht.WP REST API ruft Posts vom Post-Typ ab

Ich bin derzeit mit WP-REST-API v2 und verwaltet eine Liste aller Post-Typen mit diesem

http://domain.com/wp-json/wp/v2/types 

holen und schaffte es dann an den Pfosten Art zu bekommen Ich bin daran interessiert, mit

http://domain.com/wp-json/wp/v2/types/the-icons-update 

Wie bekomme ich alle Beiträge von diesem bestimmten Inhaltstyp?

Ich habe versucht, mit

http://domain.com/wp-json/wp/v2/posts?filter[post_type]=the-icons-update 

Aber es gibt ein leeres Array (ich nehme es die Standard-Beiträge zurückgibt und auf meiner Website gibt es nur Beiträge innerhalb der benutzerdefinierten Post Typ I abzurufen bin versucht).

Könnte es ein Problem mit der Registrierung des Post-Typs geben?

function custom_post_type() { 
$labels = array(
    'name'    => _x('The Icons Update', 'post type general name'), 
    'singular_name'  => _x('The Icons Update', 'post type singular name'), 
    'add_new'   => _x('Add Page', 'magazine'), 
    'add_new_item'  => __('Add New Page'), 
    'edit_item'   => __('Edit Page'), 
    'new_item'   => __('New Page'), 
    'all_items'   => __('All Pages'), 
    'view_item'   => __('View Page'), 
    'search_items'  => __('Search Pages'), 
    'not_found'   => __('No Page found'), 
    'not_found_in_trash' => __('No Page found in the Trash'), 
    'parent_item_colon' => '', 
    'menu_icon'   => '', 
    'menu_name'   => 'The Icons Update' 
); 
$args = array(
    'labels'  => $labels, 
    'description' => 'Holds our projects and project specific data', 
    'public'  => true, 
    'menu_position' => 5, 
    'supports'  => array('title', 'editor', 'thumbnail', 'excerpt', 'custom-fields'), 
    'has_archive' => true, 
    'taxonomies' => array('post_tag', 'category'), 
    'hierarchical' => false, 
    'query_var'  => true, 
    'queryable' => true, 
     'searchable' => true, 
    'rewrite'  => array('slug' => 'the-icons-update') 
); 
register_post_type('magazine', $args); 
flush_rewrite_rules(); 
} 
add_action('init', 'custom_post_type'); 

Jede mögliche Hilfe bei diesem ist wirklich zu schätzen.

Antwort

5

Es ist eine wirklich gedreht und einfache Möglichkeit für v.2. Alles, was Sie tun müssen, ist zu Ihrem args Array die folgende Eigenschaft enthalten: 'show_in_rest' => true

Beispiel:

register_post_type('recipe', 
    array(
      'labels' => $labels, 
      'public' => true, 
      'menu_position' => 5, 
      'hierarchical' => false, 
      'supports' => $supports, 
      'show_in_rest' => true, 
      'taxonomies' => array('recipe-type', 'post_tag'), 
      'rewrite' => array('slug' => __('recipe', 'recipe')) 
    ) 
); 
+0

Wo füge ich das hinzu? Vielen Dank. – Si8

+0

@ Si8 in Ihrer 'functions.php' Datei;) –

+0

Ich möchte nur die ID des Posts und das ist alles. Würde das oben genannte funktionieren? Ich kann eine neue Frage öffnen, wenn es gerechtfertigt ist. Danke – Si8

2

register_post_type ('Name des Beitragstyps' ...) nicht der 'add_new' Name. Ändern Sie den Namen Ihres Post-Typs in Magazine und überprüfen Sie das Ergebnis. Ich hoffe es hilft.

+0

Danke, ich habe diese Änderung aber leider hat es nicht mein Problem zu lösen.Ich kehrte zu v1 des REST-API-Plugins zurück und mit http://domain.com/wp-json/posts?type=magazine konnte ich die Posts von diesem spezifischen Post-Typ abrufen. Danke – Jeff

2

Durch Zurücksetzen auf v1 des REST-API-Plugins und mit /wp-json/posts?type=name-of-post-type konnte ich die Posts von diesem spezifischen Post-Typ abrufen.

2

Um v2 der REST-API-Plugin verwenden:

In functions.php Datei von Ihrem Thema, fügen Sie folgendes einen Rest Endpunkt zu erstellen:

add_action('init', 'add_myCustomPostType_endpoint'); 
function add_myCustomPostType_endpoint(){ 

    global $wp_post_types; 
    $wp_post_types['myCustomPostType']->show_in_rest = true; 
    $wp_post_types['myCustomPostType']->rest_base = 'myCustomPostType'; 
    $wp_post_types['myCustomPostType']->rest_controller_class = 'WP_REST_Posts_Controller'; 
} 

Jetzt sollen Sie das haben folgende Endpunkt abzufragen aus:

/wp-json/wp/v2/myCustomPostType 

myCustomPostType die cust sein om Beitragstyp, den Sie registriert haben. Die "rest_base" muss nicht mit dem Namen Ihres benutzerdefinierten Post-Typs übereinstimmen.

Sie werden wahrscheinlich zusätzliche Felder hinzufügen, die spezifisch für Ihren benutzerdefinierten Post-Typ sind, wie Post-Metadaten oder vielleicht aus dem Advanced Custom Fields-Plugin. Für diese Szenarien können Sie diese Eigenschaften durch Zugabe eines Schnipsel wie diese zu Ihrem functions.php Datei enthalten:

function add_myCustomPostType_fields_url_to_myCustomPostType_request($data, $post, $request) { 
    $_data = $data->data; 

    $customImageProperty = get_field('customImageProperty'); 

    $_data['customImageProperty'] = $customImageProperty['url']; 

    $data->data = $_data; 
    return $data; 
} 
add_filter('rest_prepare_myCustomPostType', 'add_myCustomPostType_fields_url_to_myCustomPostType_request', 10, 3);