Come recuperare i post da un custom post type con WP REST API

4 set 2015, 10:50:26
Visualizzazioni: 41.4K
Voti: 23

Come posso ottenere tutti i post da uno specifico custom post type con WP REST API (sia v1 che v2)? Sono molto nuovo in questo e sto cercando di capire come farlo.

Attualmente sto utilizzando WP REST API v2 e sono riuscito a recuperare una lista di tutti i post type con questo

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

e poi sono riuscito a ottenere il post type che mi interessa con

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

Come faccio a ottenere tutti i post da quello specifico tipo di contenuto?

Ho provato con

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

Ma restituisce un array vuoto (suppongo che restituisca i post predefiniti e sul mio sito ci sono solo post all'interno del custom post type che sto cercando di recuperare).

Potrebbe esserci un problema con come ho registrato il post type?

function custom_post_type() {
$labels = array(
    'name'               => _x( 'The Icons Update', 'nome generale del tipo di post' ),
    'singular_name'      => _x( 'The Icons Update', 'nome singolare del tipo di post' ),
    'add_new'            => _x( 'Aggiungi Pagina', 'rivista' ),
    'add_new_item'       => __( 'Aggiungi Nuova Pagina' ),
    'edit_item'          => __( 'Modifica Pagina' ),
    'new_item'           => __( 'Nuova Pagina' ),
    'all_items'          => __( 'Tutte le Pagine' ),
    'view_item'          => __( 'Visualizza Pagina' ),
    'search_items'       => __( 'Cerca Pagine' ),
    'not_found'          => __( 'Nessuna Pagina trovata' ),
    'not_found_in_trash' => __( 'Nessuna Pagina trovata nel Cestino' ), 
    'parent_item_colon'  => '',
    'menu_icon'          => '',
    'menu_name'          => 'The Icons Update'
);
$args = array(
    'labels'        => $labels,
    'description'   => 'Contiene i nostri progetti e i dati specifici del progetto',
    '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' );

Qualsiasi aiuto su questo è molto apprezzato.

0
Tutte le risposte alla domanda 4
1
30

Basta aggiungere il seguente parametro alla funzione register_post_type, può essere inserito prima del parametro 'menu_position': 'show_in_rest' => true

Aggiungi descrizione dell'immagine qui

Se stai utilizzando un plugin per registrare il tuo post type, puoi usare il seguente codice:

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;
}

Dopo di che, sarai in grado di elencare i tuoi post da mydomain.com/wp-json/wp/v2/posttype_slug

Nel mio caso: mydomain.com/wp-json/wp/v2/anuncio

Puoi anche registrare una nuova base utilizzando il seguente codice:

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';
}

Sostituisci semplicemente anuncio con lo slug del tuo post type e 'clasi' sarà la tua rotta. mydomain.com/wp-json/wp/v2/clasi

8 set 2015 04:48:51
Commenti

Grazie, questo ha quasi risolto il mio problema! Ora ottengo alcuni post da quel tipo specifico di post ma non tutti appaiono e inoltre i loro dati non sono completi, ad esempio la categoria non è elencata e ho anche bisogno che i campi personalizzati avanzati (ACF) siano elencati (in WP REST API v1.2.3 sono riuscito a far apparire gli ACF). Grazie per il tuo aiuto su questo.

Jeff Jeff
8 set 2015 20:34:18
0

Per mostrare i custom post type nella versione 2, devi aggiungere 'show_in_rest' => true negli argomenti della funzione register_post_type, dopodiché i tuoi post con quel custom post type saranno disponibili all'endpoint: wp-json/wp/v2/your-custom-post-type.

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

21 set 2015 15:31:55
1

Ecco la mia risposta completa tradotta in italiano:-

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'     => __('Elemento Portfolio', 'text_domain'),
        'all_items'          => __('Tutti gli Elementi', 'text_domain'),
        'add_new'            => _x('Aggiungi Nuovo', 'prefix_portfolio', 'text_domain'),
        'add_new_item'       => __('Aggiungi Nuovo Elemento', 'text_domain'),
        'edit_item'          => __('Modifica Elemento', 'text_domain'),
        'new_item'           => __('Nuovo Elemento', 'text_domain'),
        'view_item'          => __('Visualizza Elemento', 'text_domain'),
        'search_items'       => __('Cerca Elementi', 'text_domain'),
        'not_found'          => __('Nessun elemento trovato.', 'text_domain'),
        'not_found_in_trash' => __('Nessun elemento trovato nel Cestino.', 'text_domain'),
        'parent_item_colon'  => __('Elementi Genitore:', '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('Categorie', 'prefix_portfolio', 'text_domain'),
        'singular_name'     => _x('Categoria', 'prefix_portfolio', 'text_domain'),
        'menu_name'         => __('Categorie', 'text_domain'),
        'all_items'         => __('Tutte le Categorie', 'text_domain'),
        'edit_item'         => __('Modifica Categoria', 'text_domain'),
        'view_item'         => __('Visualizza Categoria', 'text_domain'),
        'update_item'       => __('Aggiorna Categoria', 'text_domain'),
        'add_new_item'      => __('Aggiungi Nuova Categoria', 'text_domain'),
        'new_item_name'     => __('Nome Nuova Categoria', 'text_domain'),
        'parent_item'       => __('Categoria Genitore', 'text_domain'),
        'parent_item_colon' => __('Categoria Genitore:', 'text_domain'),
        'search_items'      => __('Cerca Categorie', 'text_domain'),
      ),
      'show_admin_column' => true,
      'hierarchical'      => true,
      'rewrite'           => array(
        'slug' => 'portfolio/categoria',
      ),
    )
  );
}

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

Dovresti anche registrare la tassonomia mentre registri il custom post type.

Dopo questo, la richiesta sarebbe:

wp-json/wp/v2/posts/?taxonomy=prefix_portfolio_categories'&term=tua-qualsiasi-categoria

Spero che questo possa esserti d'aiuto :)

4 set 2015 12:19:05
Commenti

Grazie mille per il tuo impegno, ma purtroppo non ha funzionato neanche questa volta. Sono sicuro di essere vicino alla soluzione, ma non riesco a capire quale possa essere il problema. Grazie ancora

Jeff Jeff
4 set 2015 18:53:20
5
-1

Dovresti usare questo:-

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

Spero funzioni :)

4 set 2015 11:05:22
Commenti

Grazie mille per la tua risposta ma non ha funzionato :(

Jeff Jeff
4 set 2015 11:09:38

Nota che se imposti query_var a false durante la registrazione della tassonomia personalizzata, dovrai cambiare i parametri in: wp-json/wp/v2/posts/?taxonomy=job-type&term=manager (è solo un esempio)

dev dev
4 set 2015 11:13:09

Grazie ma non ha funzionato neanche questo. Potrebbe esserci un problema con come ho registrato il custom post type? Ho aggiornato la domanda, se potessi darci un'occhiata te ne sarei molto grato

Jeff Jeff
4 set 2015 11:38:05

Sì, ho appena verificato la risposta aggiornata

dev dev
4 set 2015 12:22:14

Questo non funziona più.

Kelderic Kelderic
14 lug 2020 20:09:14