web-dev-qa-db-fra.com

WP REST API récupérer des publications à partir du type de publication

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

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

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

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

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

Comment puis-je 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 publications par défaut et sur mon site, il n'y a que des publications dans le type de publication personnalisé que j'essaie de récupérer).

Peut-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.

12
Jeff

Il suffit d’ajouter le parent suivant dans la fonction register_post_type, cela peut être avant le paramètre 'menu_position'. 'show_in_rest' => true

 enter image description here 

si vous utilisez un plugin pour enregistrer votre type postal, 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 de 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';
}

remplacez simplement anuncio par votre type de message et "clasi" sera votre itinéraire. mydomain.com/wp-json/wp/v2/clasi

15
Dioni Mercado

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

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

4
kabisote

Vous devriez utiliser ceci: -

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

Esperons que ça marche :)

0
dev

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

0
dev