Wordpress REST Crear publicación de tipo personalizado

4

Estoy usando la API REST para crear publicaciones.

Puedo crear publicaciones normales, pero me gustaría crear publicaciones de tipo personalizado.

http://example.com/wp-json/wp/v2/posts

Estoy intentando POST a la URL anterior con datos como

title: 'Loreum Ipsum',
content: 'Test Post',
post_type: custom_type

que no crea la publicación de tipo custom_type en lugar de la publicación normal.

He intentado publicar en

http://example.com/wp-json/wp/v2/posts?post_type=custom_post

con los datos,

title: 'Loreum Ipsum',
content: 'Test Post',

pero aún así crea una publicación normal.

También he intentado enviar los datos como

title: 'Loreum Ipsum',
content: 'Test Post',
type: custom_type

a http://example.com/wp-json/wp/v2/posts

que también crea una publicación normal.

Estoy usando POSTMAN para enviar los datos. ¿Qué más debería intentar?

Cualquier ayuda o sugerencia apreciada!

    
pregunta linktoahref 14.02.2018 - 14:15

1 respuesta

5

Asegúrese de que su tipo de publicación se muestra en la API de REST.

$args = array(
  //* Use whatever other args you want
  'show_in_rest'          => true,
  'rest_base'             => 'myslug',
  'rest_controller_class' => 'WP_REST_Posts_Controller',
);
register_post_type( 'myslug', $args );

El punto final para crear una publicación sería http://example.com/wp-json/wp/v2/myslug .

Editar:

Lo anterior es todo lo que se necesita para que un tipo de publicación personalizada esté disponible como un punto final REST utilizando el WP_REST_Posts_Controller predeterminado. Inicialmente tuve el siguiente código, porque creo que facilita el uso de la API REST. Sin embargo, como se señaló en los comentarios, no es necesario responder esta pregunta. Puedes usar el punto final.

function wpse294085_wp_enqueue_scripts() {
  wp_enqueue_script( 'wp-api' );
  wp_enqueue_script( 'my-script', PATH_TO . 'my-script.js', [ 'wp-api' ] );
}
add_action( 'wp_enqueue_scripts', 'wpse294085_wp_enqueue_scripts' );

Luego, en my-script.js, solo usa Backbone.

wp.api.loadPromise.done( function() {
  var post = new wp.api.models.Myslug( {
    'id': null,
    'title': 'Example New Post',
    'content': 'YOLO'
  } );
  var xhr = post.save();
});
    
respondido por el Nathan Johnson 14.02.2018 - 17:33

Lea otras preguntas en las etiquetas