WP REST API busca publicaciones del tipo de publicación

15

¿Cómo puedo obtener todas las publicaciones de un tipo de publicación personalizado específico con WP REST API (v1 o v2)? Soy muy nuevo en esto y trato de entender cómo hacerlo.

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

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

y luego logré obtener el tipo de publicación que me interesa

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

¿Cómo obtengo todas las publicaciones 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 una matriz vacía (supongo que devuelve las publicaciones predeterminadas y en mi sitio solo hay publicaciones dentro del tipo de publicación personalizada que estoy tratando de recuperar).

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

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

Cualquier ayuda con esto es realmente apreciada.

Jeff
fuente

Respuestas:

18

Simplemente agregue el siguiente parámetro en la función register_post_type, puede estar antes del parámetro 'menu_position'. 'show_in_rest' => verdadero

ingrese la descripción de la imagen aquí

Si está utilizando un complemento para registrar su tipo de publicación, puede 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 enumerar tus publicaciones desde mydomain.com/wp-json/wp/v2/posttype_slug

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

También puede registrar una nueva base utilizando 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';
}

simplemente reemplace anunciopor su publicación tipo babosa y 'clasi' será su ruta. mydomain.com/wp-json/wp/v2/clasi

Dioni Mercado
fuente
¡Gracias, esto casi solucionó mi problema! Ahora recibo algunas publicaciones de ese tipo de publicación específico, pero no todas aparecen y tampoco sus datos están completos, por ejemplo, la categoría no está en la lista y también necesito que aparezcan los campos personalizados avanzados (en WP REST API v1.2.3 Logré hacer aparecer el ACF). Gracias por su ayuda en esto
Jeff
4

Para mostrar tipos de publicaciones personalizadas en la versión 2, debe agregar 'show_in_rest' => truelos argumentos de la función register_post_type, luego sus publicaciones con ese tipo de publicación personalizada estarán disponibles en el punto final: wp-json / wp / v2 / your-custom-post-type .

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

kabisote
fuente
0

Deberías usar esto: -

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

Espero que funcione :)

dev
fuente
Muchas gracias por su respuesta, pero eso no funcionó :(
Jeff
Tenga en cuenta que si establece query_var en falso al registrar la taxonomía personalizada, deberá cambiar los parámetros a: wp-json / wp / v2 / posts /? Taxonomy = job-type & term = manager (es solo un ejemplo)
dev
Gracias pero tampoco funcionó. ¿Podría haber un problema con la forma en que registré el tipo de publicación personalizada? He actualizado la pregunta. Si pudieran echarle un vistazo, les estaría muy agradecido
Jeff
Sí, solo verifiqué la respuesta actualizada
dev
0

Ok, aquí está mi respuesta 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);

También debe registrar la taxonomía al registrar la publicación personalizada.

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

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

Espero que esto pueda ayudarte :)

dev
fuente
Un millón de gracias por su esfuerzo en esto, pero desafortunadamente tampoco funcionó. Estoy seguro de que estoy bastante cerca, pero no entiendo cuál podría ser el problema. Gracias de nuevo
Jeff