Obtener posts de un tipo de post personalizado con WP REST API

4 sept 2015, 10:50:26
Vistas: 41.4K
Votos: 23

¿Cómo puedo obtener todos los posts de un tipo de post personalizado específico con WP REST API (ya sea v1 o v2)? Soy muy nuevo en esto y estoy tratando de entender cómo hacerlo.

Actualmente estoy usando WP REST API v2 y logré obtener una lista de todos los tipos de posts con esto

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

y luego logré obtener el tipo de post que me interesa con

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

¿Cómo obtengo todos los posts de ese tipo de contenido específico?

He intentado con

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

Pero devuelve un array vacío (supongo que devuelve los posts predeterminados y en mi sitio solo hay posts dentro del tipo de post personalizado que estoy tratando de recuperar).

¿Podría haber un problema con la forma en que registré el tipo de post?

function custom_post_type() {
$labels = array(
    'name'               => _x( 'The Icons Update', 'nombre general del tipo de post' ),
    'singular_name'      => _x( 'The Icons Update', 'nombre singular del tipo de post' ),
    'add_new'            => _x( 'Agregar Página', 'revista' ),
    'add_new_item'       => __( 'Agregar Nueva Página' ),
    'edit_item'          => __( 'Editar Página' ),
    'new_item'           => __( 'Nueva Página' ),
    'all_items'          => __( 'Todas las Páginas' ),
    'view_item'          => __( 'Ver Página' ),
    'search_items'       => __( 'Buscar Páginas' ),
    'not_found'          => __( 'No se encontró ninguna Página' ),
    'not_found_in_trash' => __( 'No se encontró ninguna Página en la Papelera' ), 
    'parent_item_colon'  => '',
    'menu_icon'          => '',
    'menu_name'          => 'The Icons Update'
);
$args = array(
    'labels'        => $labels,
    'description'   => 'Contiene nuestros proyectos y datos específicos del proyecto',
    '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' );

Cualquier ayuda con esto es realmente apreciada.

0
Todas las respuestas a la pregunta 4
1
30

Solo agrega el siguiente parámetro a la función register_post_type, puede ir antes del parámetro 'menu_position': 'show_in_rest' => true

Descripción de la imagen aquí

Si estás usando un plugin para registrar tu tipo de publicación, puedes usar el siguiente 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;
}

Después de eso, podrás listar tus publicaciones desde mydomain.com/wp-json/wp/v2/posttype_slug

En mi caso: mydomain.com/wp-json/wp/v2/anuncio

También puedes registrar una nueva base usando el siguiente 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';
}

Solo reemplaza anuncio por el slug de tu tipo de publicación y 'clasi' será tu ruta: mydomain.com/wp-json/wp/v2/clasi

8 sept 2015 04:48:51
Comentarios

¡Gracias, esto casi resuelve mi problema! Ahora obtengo algunas publicaciones de ese tipo de publicación específico, pero no aparecen todas y además sus datos no están completos, por ejemplo, la categoría no se muestra y también necesito que los campos personalizados avanzados (ACF) aparezcan (en WP REST API v1.2.3 logré hacer que los ACF aparecieran). Gracias por tu ayuda con esto.

Jeff Jeff
8 sept 2015 20:34:18
0

Para mostrar tipos de entrada personalizados en la versión 2, necesitas agregar 'show_in_rest' => true en los argumentos de la función register_post_type, luego tus publicaciones con ese tipo de entrada personalizado estarán disponibles en el endpoint: wp-json/wp/v2/tu-tipo-entrada-personalizado.

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

21 sept 2015 15:31:55
1

Aquí está mi respuesta completa:-

function prefix_register_post_type()
{
  register_post_type(
    'prefix_portfolio',
    array(
      'labels'        => array(
        'name'               => __('Portafolio', 'text_domain'),
        'singular_name'      => __('Portafolio', 'text_domain'),
        'menu_name'          => __('Portafolio', 'text_domain'),
        'name_admin_bar'     => __('Elemento de Portafolio', 'text_domain'),
        'all_items'          => __('Todos los Elementos', 'text_domain'),
        'add_new'            => _x('Añadir Nuevo', 'prefix_portfolio', 'text_domain'),
        'add_new_item'       => __('Añadir Nuevo Elemento', 'text_domain'),
        'edit_item'          => __('Editar Elemento', 'text_domain'),
        'new_item'           => __('Nuevo Elemento', 'text_domain'),
        'view_item'          => __('Ver Elemento', 'text_domain'),
        'search_items'       => __('Buscar Elementos', 'text_domain'),
        'not_found'          => __('No se encontraron elementos.', 'text_domain'),
        'not_found_in_trash' => __('No se encontraron elementos en la Papelera.', 'text_domain'),
        'parent_item_colon'  => __('Elementos Padre:', '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' => 'portafolio',
      ),
    )
  );
}

add_action('init', 'prefix_register_post_type');


function prefix_register_taxonomy()
{
  register_taxonomy(
    'prefix_portfolio_categories',
    array(
      'prefix_portfolio',
    ),
    array(
      'labels'            => array(
        'name'              => _x('Categorías', 'prefix_portfolio', 'text_domain'),
        'singular_name'     => _x('Categoría', 'prefix_portfolio', 'text_domain'),
        'menu_name'         => __('Categorías', 'text_domain'),
        'all_items'         => __('Todas las Categorías', 'text_domain'),
        'edit_item'         => __('Editar Categoría', 'text_domain'),
        'view_item'         => __('Ver Categoría', 'text_domain'),
        'update_item'       => __('Actualizar Categoría', 'text_domain'),
        'add_new_item'      => __('Añadir Nueva Categoría', 'text_domain'),
        'new_item_name'     => __('Nombre de Nueva Categoría', 'text_domain'),
        'parent_item'       => __('Categoría Padre', 'text_domain'),
        'parent_item_colon' => __('Categoría Padre:', 'text_domain'),
        'search_items'      => __('Buscar Categorías', 'text_domain'),
      ),
      'show_admin_column' => true,
      'hierarchical'      => true,
      'rewrite'           => array(
        'slug' => 'portafolio/categoria',
      ),
    )
  );
}

add_action('init', 'prefix_register_taxonomy', 0);

También deberías registrar la taxonomía al registrar el tipo de contenido personalizado.

Después de esto, la solicitud sería:

wp-json/wp/v2/posts/?taxonomy=prefix_portfolio_categories'&term=tu-cualquier-categoria

Espero que esto te ayude :)

4 sept 2015 12:19:05
Comentarios

Muchas gracias por tu esfuerzo en esto, pero desafortunadamente eso tampoco funcionó. Estoy seguro de que estoy muy cerca, pero no entiendo cuál podría ser el problema. Gracias de nuevo

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

Deberías usar esto:-

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

Espero que funcione :)

4 sept 2015 11:05:22
Comentarios

Muchas gracias por tu respuesta pero eso no funcionó :(

Jeff Jeff
4 sept 2015 11:09:38

Ten en cuenta que si configuras query_var como false al registrar la taxonomía personalizada, necesitarás cambiar los parámetros a: wp-json/wp/v2/posts/?taxonomy=job-type&term=manager (es solo un ejemplo)

dev dev
4 sept 2015 11:13:09

Gracias pero tampoco funcionó. ¿Podría haber un problema con cómo registré el tipo de contenido personalizado? He actualizado la pregunta, si pudieras echarle un vistazo te estaría muy agradecido

Jeff Jeff
4 sept 2015 11:38:05

Sí, acabo de verificar la respuesta actualizada

dev dev
4 sept 2015 12:22:14

Esto ya no funciona.

Kelderic Kelderic
14 jul 2020 20:09:14