WP REST API - obținere articole dintr-un tip de postare personalizat
Cum pot obține toate articolele dintr-un tip de postare personalizat (custom post type) folosind WP REST API (fie v1 sau v2)? Sunt începător în această privință și încerc să înțeleg cum să fac asta.
În prezent folosesc WP REST API v2 și am reușit să preiau o listă cu toate tipurile de postări folosind
http://domain.com/wp-json/wp/v2/types
și apoi am reușit să obțin tipul de postare care mă interesează cu
http://domain.com/wp-json/wp/v2/types/the-icons-update
Cum pot obține toate articolele din acel tip de conținut specific?
Am încercat cu
http://domain.com/wp-json/wp/v2/posts?filter[post_type]=the-icons-update
Dar îmi returnează un array gol (presupun că returnează postările implicite și pe site-ul meu există doar articole în tipul de postare personalizat pe care încerc să-l preiau).
Ar putea fi o problemă cu modul în care am înregistrat tipul de postare?
function custom_post_type() {
$labels = array(
'name' => _x( 'The Icons Update', 'nume general tip postare' ),
'singular_name' => _x( 'The Icons Update', 'nume singular tip postare' ),
'add_new' => _x( 'Adaugă Pagină', 'revistă' ),
'add_new_item' => __( 'Adaugă Pagină Nouă' ),
'edit_item' => __( 'Editează Pagina' ),
'new_item' => __( 'Pagină Nouă' ),
'all_items' => __( 'Toate Paginile' ),
'view_item' => __( 'Vezi Pagina' ),
'search_items' => __( 'Caută Pagini' ),
'not_found' => __( 'Nu s-a găsit nicio pagină' ),
'not_found_in_trash' => __( 'Nu s-a găsit nicio pagină în coșul de gunoi' ),
'parent_item_colon' => '',
'menu_icon' => '',
'menu_name' => 'The Icons Update'
);
$args = array(
'labels' => $labels,
'description' => 'Conține proiectele noastre și datele specifice proiectului',
'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' );
Orice ajutor în această privință este foarte apreciat.
Doar adaugă următorul parametru în funcția register_post_type, poate fi înainte de parametrul 'menu_position'. 'show_in_rest' => true
dacă folosești un plugin pentru a înregistra tipul tău de postare, poți utiliza următorul cod:
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;
}
după aceea, vei putea lista postările tale de la mydomain.com/wp-json/wp/v2/posttype_slug
în cazul meu: mydomain.com/wp-json/wp/v2/anuncio
poți de asemenea să înregistrezi o nouă bază folosind următorul cod:
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';
}
doar înlocuiește anuncio
cu slug-ul tipului tău de postare și 'clasi' va fi ruta ta. mydomain.com/wp-json/wp/v2/clasi

Mulțumesc, asta aproape că mi-a rezolvat problema! Acum primesc câteva articole din acel tip specific de postare, dar nu toate apar și de asemenea datele lor nu sunt complete, de exemplu categoria nu este listată și am nevoie și ca câmpurile personalizate avansate să fie listate (în WP REST API v1.2.3 am reușit să fac ACF-urile să apară). Mulțumesc pentru ajutorul oferit.

Pentru a afișa tipurile personalizate de postări în versiunea 2, trebuie să adăugați 'show_in_rest' => true
în argumentele funcției register_post_type, apoi postările cu acel tip personalizat vor fi disponibile la endpoint-ul: wp-json/wp/v2/numele-tipului-tau-personalizat.
Sursa: http://scottbolinger.com/custom-post-types-wp-api-v2/

Iată răspunsul meu complet:-
function prefix_register_post_type()
{
register_post_type(
'prefix_portfolio',
array(
'labels' => array(
'name' => __('Portofoliu', 'text_domain'),
'singular_name' => __('Portofoliu', 'text_domain'),
'menu_name' => __('Portofoliu', 'text_domain'),
'name_admin_bar' => __('Element Portofoliu', 'text_domain'),
'all_items' => __('Toate Elementele', 'text_domain'),
'add_new' => _x('Adaugă Nou', 'prefix_portfolio', 'text_domain'),
'add_new_item' => __('Adaugă Element Nou', 'text_domain'),
'edit_item' => __('Editează Element', 'text_domain'),
'new_item' => __('Element Nou', 'text_domain'),
'view_item' => __('Vezi Element', 'text_domain'),
'search_items' => __('Caută Elemente', 'text_domain'),
'not_found' => __('Nu s-au găsit elemente.', 'text_domain'),
'not_found_in_trash' => __('Nu s-au găsit elemente în Coșul de Gunoi.', 'text_domain'),
'parent_item_colon' => __('Elemente Părinte:', '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' => 'portofoliu',
),
)
);
}
add_action('init', 'prefix_register_post_type');
function prefix_register_taxonomy()
{
register_taxonomy(
'prefix_portfolio_categories',
array(
'prefix_portfolio',
),
array(
'labels' => array(
'name' => _x('Categorii', 'prefix_portfolio', 'text_domain'),
'singular_name' => _x('Categorie', 'prefix_portfolio', 'text_domain'),
'menu_name' => __('Categorii', 'text_domain'),
'all_items' => __('Toate Categoriile', 'text_domain'),
'edit_item' => __('Editează Categorie', 'text_domain'),
'view_item' => __('Vezi Categorie', 'text_domain'),
'update_item' => __('Actualizează Categorie', 'text_domain'),
'add_new_item' => __('Adaugă Categorie Nouă', 'text_domain'),
'new_item_name' => __('Nume Categorie Nouă', 'text_domain'),
'parent_item' => __('Categorie Părinte', 'text_domain'),
'parent_item_colon' => __('Categorie Părinte:', 'text_domain'),
'search_items' => __('Caută Categorii', 'text_domain'),
),
'show_admin_column' => true,
'hierarchical' => true,
'rewrite' => array(
'slug' => 'portofoliu/categorie',
),
)
);
}
add_action('init', 'prefix_register_taxonomy', 0);
De asemenea, ar trebui să înregistrați taxonomia în timp ce înregistrați postul personalizat.
După aceasta, cererea ar fi:
wp-json/wp/v2/posts/?taxonomy=prefix_portfolio_categories'&term=orice-categorie-a-ta
Sper că acest lucru vă poate ajuta :)

Te rog să iei în considerare că dacă setezi query_var la false atunci când înregistrezi taxonomia personalizată, va trebui să modifici parametrii în: wp-json/wp/v2/posts/?taxonomy=job-type&term=manager (doar un exemplu)

Mulțumesc, dar nici asta nu a funcționat. Ar putea fi o problemă cu modul în care am înregistrat tipul de postare personalizat? Am actualizat întrebarea, dacă ai putea arunca o privire aș fi foarte recunoscător
