L'API WP REST récupère les publications du type de publication


15

Comment puis-je obtenir toutes les publications d'un type de publication personnalisé spécifique avec l'API WP REST (v1 ou v2)? Je suis très nouveau dans ce domaine et j'essaie de comprendre comment le faire.

J'utilise actuellement WP REST API v2 et j'ai réussi à récupérer une liste de tous les types de messages avec ce

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

puis réussi à obtenir le type de message qui m'intéresse

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

Comment obtenir tous les messages de ce type de contenu spécifique?

J'ai essayé avec

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

Mais il renvoie un tableau vide (je suppose qu'il renvoie les messages par défaut et sur mon site, il n'y a que des messages à l'intérieur du type de message personnalisé que j'essaie de récupérer).

Pourrait-il y avoir un problème avec la façon dont j'ai enregistré le type de message?

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

Toute aide à cet égard est vraiment appréciée.

Réponses:


18

Ajoutez simplement le parmater suivant dans la fonction register_post_type, il peut être avant le paramètre 'menu_position'. 'show_in_rest' => vrai

entrez la description de l'image ici

si vous utilisez un plugin pour enregistrer votre post-type, vous pouvez utiliser le code suivant:

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

après cela, vous pourrez lister vos messages depuis mydomain.com/wp-json/wp/v2/posttype_slug

dans mon cas: mydomain.com/wp-json/wp/v2/anuncio

vous pouvez également enregistrer une nouvelle base en utilisant le code suivant:

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

il suffit de remplacer anunciopour votre slug de type de poste et «clasi» sera votre itinéraire. mydomain.com/wp-json/wp/v2/clasi


Merci, cela a presque résolu mon problème! Je reçois maintenant certains messages de ce type de message spécifique, mais tous n'apparaissent pas et leurs données ne sont pas complètes, par exemple, la catégorie n'est pas répertoriée et j'ai également besoin que les champs personnalisés avancés soient répertoriés (dans WP REST API v1.2.3 J'ai réussi à faire apparaître l'ACF). Merci pour votre aide à ce sujet
Jeff

4

Pour afficher les types de publication personnalisés dans la version 2, vous devez ajouter 'show_in_rest' => trueles arguments de la fonction register_post_type, puis vos publications avec ce type de publication personnalisé seront disponibles au point de terminaison: wp-json / wp / v2 / votre-type-de publication personnalisé .

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


0

Vous devez utiliser ceci: -

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

Esperons que ça marche :)


Merci beaucoup pour votre réponse mais cela n'a pas fonctionné :(
Jeff

Veuillez noter que si vous définissez false sur query_var lors de l'enregistrement de la taxonomie personnalisée, vous devrez modifier les paramètres en: wp-json / wp / v2 / posts /? Taxonomy = job-type & term = manager (c'est juste un exemple)
dev

Merci mais cela n'a pas fonctionné non plus. Pourrait-il y avoir un problème avec la façon dont j'ai enregistré le type de message personnalisé? J'ai mis à jour la question, si vous pouviez y jeter un œil, je vous en serais très reconnaissant
Jeff

Oui vient de vérifier la réponse mise à jour
dev

0

Ok voici ma réponse complète: -

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

Vous devez également enregistrer la taxonomie lors de l'enregistrement de la publication personnalisée.

Après cela, la demande serait:

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

J'espère que cela peut vous aider :)


Merci mille fois pour vos efforts, mais cela n'a malheureusement pas fonctionné non plus. Je suis sûr que je suis assez proche, mais je ne comprends pas quel pourrait être le problème. Merci encore
Jeff
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.