WP REST API - obținere articole dintr-un tip de postare personalizat

4 sept. 2015, 10:50:26
Vizualizări: 41.4K
Voturi: 23

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.

0
Toate răspunsurile la întrebare 4
1
30

Doar adaugă următorul parametru în funcția register_post_type, poate fi înainte de parametrul 'menu_position'. 'show_in_rest' => true

descrierea imaginii aici

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

8 sept. 2015 04:48:51
Comentarii

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.

Jeff Jeff
8 sept. 2015 20:34:18
0

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/

21 sept. 2015 15:31:55
1

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

4 sept. 2015 12:19:05
Comentarii

Vă mulțumesc din suflet pentru efortul depus, dar din păcate nici asta nu a funcționat. Sunt sigur că sunt foarte aproape, dar nu înțeleg care ar putea fi problema. Vă mulțumesc din nou

Jeff Jeff
4 sept. 2015 18:53:20
5
-1

Ar trebui să folosești asta:-

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

Sper să funcționeze :)

4 sept. 2015 11:05:22
Comentarii

Mulțumesc mult pentru răspuns, dar nu a funcționat :(

Jeff Jeff
4 sept. 2015 11:09:38

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)

dev dev
4 sept. 2015 11:13:09

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

Jeff Jeff
4 sept. 2015 11:38:05

Da, tocmai am verificat răspunsul actualizat

dev dev
4 sept. 2015 12:22:14

Acest lucru nu mai funcționează.

Kelderic Kelderic
14 iul. 2020 20:09:14