A API REST do WP busca postagens do tipo de postagem

15

Como posso obter todas as postagens de um tipo de postagem personalizado específico com a API REST do WP (v1 ou v2)? Eu sou muito novo nisso e estou tentando entender como fazer isso.

Atualmente, estou usando a API REST do WP v2 e consegui buscar uma lista de todos os tipos de postagem com este

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

e depois consegui o tipo de postagem que me interessa

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

Como obtenho todas as postagens desse tipo de conteúdo específico?

Eu tentei com

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

Mas ele retorna uma matriz vazia (suponho que ele retorne as postagens padrão e, no meu site, existem apenas postagens dentro do tipo de postagem personalizada que estou tentando recuperar).

Pode haver um problema com o registro do tipo de postagem?

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

Qualquer ajuda com isso é realmente apreciada.

Jeff
fonte

Respostas:

18

Basta adicionar o próximo parmater na função register_post_type, que pode estar antes do parâmetro 'menu_position'. 'show_in_rest' => verdadeiro

insira a descrição da imagem aqui

se você estiver usando um plug-in para registrar seu tipo de postagem, poderá usar o próximo código:

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

depois disso, você poderá listar suas postagens em mydomain.com/wp-json/wp/v2/posttype_slug

no meu caso: mydomain.com/wp-json/wp/v2/anuncio

você também pode registrar uma nova base usando o próximo código:

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

basta substituir anuncioa lesma do seu tipo de postagem e 'clasi' será a sua rota. mydomain.com/wp-json/wp/v2/clasi

Dioni Mercado
fonte
Obrigado, isso quase resolveu meu problema! Agora, recebo algumas postagens desse tipo específico, mas nem todas aparecem e também seus dados não estão completos. Por exemplo, a categoria não está listada e também preciso que os campos personalizados avançados sejam listados (na API REST WP v1.2.3 Consegui fazer o ACF aparecer). Obrigado pela sua ajuda sobre isso #
960
4

Para mostrar os tipos de postagem personalizados na versão 2, você precisa adicionar 'show_in_rest' => trueos argumentos da função register_post_type; suas postagens com esse tipo de postagem personalizada estarão disponíveis no terminal: wp-json / wp / v2 / your-custom-post-type .

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

kabisote
fonte
0

Você deve usar isto: -

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

Espero que funcione :)

dev
fonte
Muito obrigado pela sua resposta, mas isso não funcionou :( #
Jeff Jeff
Observe que se você definir o query_var como false ao registrar a taxonomia customizada, precisará alterar os parâmetros para: wp-json / wp / v2 / posts /? Taxonomy = tipo de trabalho e termo = gerente (é apenas um exemplo)
dev
Obrigado, mas também não funcionou. Pode haver um problema com o registro do tipo de postagem personalizada? Eu atualizei a questão, Se você pudesse dar uma olhada nisso, eu ficaria muito grato
Jeff
Sim, apenas verifiquei a resposta atualizada
dev
0

Ok, aqui está a minha resposta 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);

Você também deve registrar a taxonomia ao registrar uma postagem personalizada.

Depois disso, a solicitação seria:

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

Espero que isso possa ajudá-lo :)

dev
fonte
Muito obrigado pelo seu esforço, mas infelizmente isso também não funcionou. Tenho certeza de que estou bem perto, mas não entendo qual poderia ser o problema. Obrigado mais uma vez
Jeff