WP REST API holt Beiträge vom Beitragstyp


15

Wie kann ich mit der WP REST-API (entweder Version 1 oder Version 2) alle Posts eines bestimmten benutzerdefinierten Post-Typs abrufen? Ich bin sehr neu in diesem Bereich und versuche zu verstehen, wie man das macht.

Ich verwende derzeit WP REST API v2 und konnte damit eine Liste aller Beitragstypen abrufen

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

und dann habe ich es geschafft, den Beitragstyp zu finden, für den ich mich interessiere

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

Wie erhalte ich alle Posts von diesem bestimmten Inhaltstyp?

Ich habe es mit versucht

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

Es wird jedoch ein leeres Array zurückgegeben (ich nehme an, es werden die Standardbeiträge zurückgegeben und auf meiner Site gibt es nur Beiträge innerhalb des benutzerdefinierten Beitragstyps, den ich abrufen möchte).

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 Hilfe dabei wird sehr geschätzt.

Antworten:


18

Fügen Sie einfach den nächsten Parameter in die Funktion register_post_type ein, er kann vor dem Parameter 'menu_position' stehen. 'show_in_rest' => true

Bildbeschreibung hier eingeben

Wenn Sie ein Plugin verwenden, um Ihren Posttyp zu registrieren, können Sie den folgenden Code verwenden:

add_action( 'init', 'add_anuncios_to_json_api', 30 );
function add_anuncios_to_json_api(){
    global $wp_post_types;
    $wp_post_types['anuncio']->show_in_rest = true;
}

Danach können Sie Ihre Posts unter mydomain.com/wp-json/wp/v2/posttype_slug auflisten

in meinem Fall: mydomain.com/wp-json/wp/v2/anuncio

Sie können auch eine neue Basis mit dem nächsten Code registrieren:

add_action( 'init', 'add_anuncios_to_json_api', 30 );
function add_anuncios_to_json_api(){
    global $wp_post_types;
    $wp_post_types['anuncio']->show_in_rest = true;
    $wp_post_types['anuncio']->rest_base = 'clasi';
    $wp_post_types['anuncio']->rest_controller_class = 'WP_REST_Posts_Controller';
}

Ersetzen anuncioSie einfach Ihre Post-Typ-Schnecke und "Clasi" wird Ihre Route sein. mydomain.com/wp-json/wp/v2/clasi


Danke, das hat mein Problem fast gelöst! Ich erhalte jetzt einige Posts von diesem bestimmten Post-Typ, aber nicht alle werden angezeigt und auch ihre Daten sind nicht vollständig. Beispielsweise ist die Kategorie nicht aufgelistet und ich muss auch die erweiterten benutzerdefinierten Felder auflisten (in WP REST API v1.2.3) Ich habe es geschafft, das ACF sichtbar zu machen). Vielen Dank für Ihre Hilfe
Jeff

4

Um benutzerdefinierte Beitragstypen in Version 2 anzuzeigen, müssen Sie 'show_in_rest' => truedie Funktionsargumente register_post_type hinzufügen. Ihre Beiträge mit diesem benutzerdefinierten Beitragstyp sind dann am Endpunkt verfügbar: wp-json / wp / v2 / your-custom-post-type .

Quelle: http://scottbolinger.com/custom-post-types-wp-api-v2/


0

Sie sollten dies verwenden: -

http://domain.com/wp-json/wp/v2/posts?job-type=your-post-type 

Hoffe, es funktioniert :)


Vielen Dank für Ihre Antwort, aber das hat nicht funktioniert :(
Jeff

Wenn Sie beim Registrieren der benutzerdefinierten Taxonomie query_var auf false setzen, müssen Sie die Parameter wie folgt ändern: wp-json / wp / v2 / posts /? Taxonomy = jobtyp & term = manager (dies ist nur ein Beispiel)
dev

Danke, aber es hat auch nicht funktioniert. Könnte es ein Problem mit der Registrierung des benutzerdefinierten Beitragstyps geben? Ich habe die Frage aktualisiert, wenn Sie einen Blick darauf werfen könnten, wäre ich sehr dankbar
Jeff

Ja, ich habe gerade die aktualisierte Antwort überprüft
dev

0

Ok hier ist meine vollständige Antwort: -

function prefix_register_post_type()
{
  register_post_type(
    'prefix_portfolio',
    array(
      'labels'        => array(
        'name'               => __('Portfolio', 'text_domain'),
        'singular_name'      => __('Portfolio', 'text_domain'),
        'menu_name'          => __('Portfolio', 'text_domain'),
        'name_admin_bar'     => __('Portfolio Item', 'text_domain'),
        'all_items'          => __('All Items', 'text_domain'),
        'add_new'            => _x('Add New', 'prefix_portfolio', 'text_domain'),
        'add_new_item'       => __('Add New Item', 'text_domain'),
        'edit_item'          => __('Edit Item', 'text_domain'),
        'new_item'           => __('New Item', 'text_domain'),
        'view_item'          => __('View Item', 'text_domain'),
        'search_items'       => __('Search Items', 'text_domain'),
        'not_found'          => __('No items found.', 'text_domain'),
        'not_found_in_trash' => __('No items found in Trash.', 'text_domain'),
        'parent_item_colon'  => __('Parent Items:', 'text_domain'),
      ),
      'public'        => true,
      'menu_position' => 5,
      'supports'      => array(
        'title',
        'editor',
        'thumbnail',
        'excerpt',
        'custom-fields',
      ),
      'taxonomies'    => array(
        'prefix_portfolio_categories',
      ),
      'has_archive'   => true,
      'rewrite'       => array(
        'slug' => 'portfolio',
      ),
    )
  );
}

add_action('init', 'prefix_register_post_type');


function prefix_register_taxonomy()
{
  register_taxonomy(
    'prefix_portfolio_categories',
    array(
      'prefix_portfolio',
    ),
    array(
      'labels'            => array(
        'name'              => _x('Categories', 'prefix_portfolio', 'text_domain'),
        'singular_name'     => _x('Category', 'prefix_portfolio', 'text_domain'),
        'menu_name'         => __('Categories', 'text_domain'),
        'all_items'         => __('All Categories', 'text_domain'),
        'edit_item'         => __('Edit Category', 'text_domain'),
        'view_item'         => __('View Category', 'text_domain'),
        'update_item'       => __('Update Category', 'text_domain'),
        'add_new_item'      => __('Add New Category', 'text_domain'),
        'new_item_name'     => __('New Category Name', 'text_domain'),
        'parent_item'       => __('Parent Category', 'text_domain'),
        'parent_item_colon' => __('Parent Category:', 'text_domain'),
        'search_items'      => __('Search Categories', 'text_domain'),
      ),
      'show_admin_column' => true,
      'hierarchical'      => true,
      'rewrite'           => array(
        'slug' => 'portfolio/category',
      ),
    )
  );
}

add_action('init', 'prefix_register_taxonomy', 0);

Sie sollten auch Taxonomie registrieren, während Sie benutzerdefinierte Posts registrieren.

Danach wäre die Anfrage:

wp-json/wp/v2/posts/?taxonomy=prefix_portfolio_categories'&term=your-any-category

Hoffe das kann dir helfen :)


Vielen Dank für Ihre Bemühungen, aber leider hat das auch nicht funktioniert. Ich bin mir sicher, dass ich ziemlich nah dran bin, aber ich verstehe nicht, woran es liegen könnte. Nochmals
Jeff
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.