API REST WP recupera i post dal tipo di post


15

Come posso ottenere tutti i post da un tipo di post personalizzato specifico con l'API REST WP (v1 o 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 un elenco di tutti i tipi di post con questo

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

e poi sono riuscito a ottenere il tipo di post che mi interessa

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

Come posso ottenere tutti i post da quel tipo di contenuto specifico?

Ci ho provato

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 tipo di post personalizzato che sto cercando di recuperare).

Potrebbe esserci un problema con il modo in cui ho registrato il tipo di post?

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

Qualsiasi aiuto con questo è molto apprezzato.

Risposte:


18

Basta aggiungere il parametro successivo nella funzione register_post_type, può essere prima del parametro 'menu_position'. 'show_in_rest' => true

inserisci qui la descrizione dell'immagine

se stai usando un plugin per registrare il tuo posttype puoi usare il codice seguente:

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

successivamente, 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 usando il codice seguente:

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 il anunciotuo tipo di lumaca e "clasi" sarà il tuo percorso. mydomain.com/wp-json/wp/v2/clasi


Grazie, questo ha quasi risolto il mio problema! Ora ricevo alcuni post da quel tipo di post specifico ma non tutti vengono visualizzati e anche i loro dati non sono completi, ad esempio la categoria non è elencata e ho anche bisogno di elencare i campi personalizzati avanzati (in WP REST API v1.2.3 Sono riuscito a far apparire l'ACF). Grazie per il tuo aiuto su questo
Jeff

4

Per mostrare i tipi di post personalizzati nella versione 2, è necessario aggiungere 'show_in_rest' => truegli argomenti della funzione register_post_type, quindi i post con quel tipo di post personalizzato saranno disponibili nell'endpoint: wp-json / wp / v2 / your-custom-post-type .

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


0

Dovresti usare questo: -

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

Spero funzioni :)


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

Si noti che se si imposta query_var su false quando si registra la tassonomia personalizzata, è necessario modificare i parametri in: wp-json / wp / v2 / posts /? Taxonomy = job-type & term = manager (è solo un esempio)
dev

Grazie ma non ha funzionato. Potrebbe esserci un problema con il modo in cui ho registrato il tipo di post personalizzato? Ho aggiornato la domanda, se potessi dargli un'occhiata sarei molto grato
Jeff

Sì, ho appena verificato la risposta aggiornata
dev

0

Ok ecco la mia risposta completa: -

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

È inoltre necessario registrare la tassonomia durante la registrazione della posta personalizzata.

Dopo questo la richiesta sarebbe:

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

Spero che questo possa aiutarti :)


Grazie mille per il tuo impegno su questo, ma sfortunatamente non ha funzionato neanche. Sono sicuro di essere abbastanza vicino ma non capisco quale potrebbe essere il problema. Grazie ancora
Jeff
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.