Come recuperare i post da un custom post type con WP REST API
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.
Basta aggiungere il seguente parametro alla funzione register_post_type, può essere inserito prima del parametro 'menu_position': 'show_in_rest' => true
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

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.

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/

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 :)

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)

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
