WP REST API recupera publicaciones del tipo de publicación

4 minutos de lectura

avatar de usuario
jeff

¿Cómo puedo obtener todas las publicaciones de un tipo de publicación personalizado específico con la API REST de WP (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 publicaciones con esto

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

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

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

Hay una manera realmente rápida y fácil para v.2. Todo lo que tienes que hacer es incluir en tu args arreglo la siguiente propiedad: 'show_in_rest' => true

Ejemplo:

register_post_type( 'recipe',
     array(
          'labels' => $labels,
          'public' => true,
          'menu_position' => 5,
          'hierarchical' => false,
          'supports' => $supports,
          'show_in_rest' => true,
          'taxonomies' => array('recipe-type', 'post_tag'),
          'rewrite' => array( 'slug' => __('recipe', 'recipe') )
     )
);

  • ¿Dónde agrego eso? Gracias.

    – Si8

    29 de noviembre de 2017 a las 21:58

  • @Si8 en tu functions.php expediente 😉

    – Hristo Eftimov

    29 de noviembre de 2017 a las 22:01

  • Solo quiero incluir el ID de la publicación y eso es todo. ¿Funcionaría lo anterior? Puedo abrir una nueva pregunta si está justificado. Gracias

    – Si8

    30 de noviembre de 2017 a las 14:28

  • Nunca lo he intentado con ID de la publicación, pero creo que debería funcionar 🙂

    – Hristo Eftimov

    30 de noviembre de 2017 a las 14:31

avatar de usuario
Garfio

Para usar la versión 2 del complemento REST API:

En el funciones.php archivo de su tema, agregue lo siguiente para crear un punto final de descanso:

add_action( 'init', 'add_myCustomPostType_endpoint');
function add_myCustomPostType_endpoint(){

    global $wp_post_types;
    $wp_post_types['myCustomPostType']->show_in_rest = true;
    $wp_post_types['myCustomPostType']->rest_base="myCustomPostType";
    $wp_post_types['myCustomPostType']->rest_controller_class="WP_REST_Posts_Controller";
}

Ahora debería tener el siguiente punto final desde el que consultar:

/wp-json/wp/v2/myCustomPostType

myCustomPostType siendo el tipo de publicación personalizada que registró. El “rest_base” no tiene que coincidir con el nombre de su tipo de publicación personalizada.

Lo más probable es que desee agregar campos adicionales que sean específicos de su tipo de publicación personalizada, como los metadatos de la publicación o tal vez de la Campos personalizados avanzados enchufar. Para esos escenarios, puede incluir esas propiedades agregando un fragmento como este a su funciones.php expediente:

function add_myCustomPostType_fields_url_to_myCustomPostType_request( $data, $post, $request ) {
    $_data = $data->data;

    $customImageProperty = get_field('customImageProperty'); 

    $_data['customImageProperty'] = $customImageProperty['url'];

    $data->data = $_data;
    return $data;
}
add_filter( 'rest_prepare_myCustomPostType', 'add_myCustomPostType_fields_url_to_myCustomPostType_request', 10, 3 );

register_post_type(‘name of post type’…) no el nombre ‘add_new’. Cambie el nombre de su tipo de publicación a Revista y verifique el resultado. Espero eso ayude.

  • Gracias, hice ese cambio pero desafortunadamente no resolvió mi problema. Volví a v1 del complemento REST API y con dominio.com/wp-json/posts?type=magazine Logré recuperar las publicaciones de ese tipo de publicación específico. Gracias

    – Jeff

    7 de septiembre de 2015 a las 7:14

Al volver a la v1 del complemento REST API y con /wp-json/posts?type=name-of-post-type Logré recuperar las publicaciones de ese tipo de publicación específico.

¿Ha sido útil esta solución?