web-dev-qa-db-fra.com

Wordpress REST Créer un message de type personnalisé

J'utilise l'API REST pour créer des publications.

Je peux créer des messages normaux, mais j'aimerais créer des messages de type personnalisé.

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

J'essaie de POST à l'URL ci-dessus avec les données comme

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

qui ne crée pas la publication de type custom_type mais une publication normale.


J'ai essayé de poster sur

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

avec les données,

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

mais cela crée quand même un message normal.


J'ai aussi essayé d'envoyer les données en tant que

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

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

ce qui crée également un post normal.


J'utilise POSTMAN pour envoyer les données. Quoi d'autre devrais-je essayer?

Toute aide ou suggestion sera appréciée!

4
linktoahref

Assurez-vous que votre type de message est affiché dans l'API 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 );

Le point de terminaison pour créer une publication serait alors http://example.com/wp-json/wp/v2/myslug.

Modifier:

Ce qui précède est tout ce qui est nécessaire pour qu'un type de publication personnalisé soit disponible en tant que noeud final REST à l'aide du contrôleur WP_REST_Posts_Contrôleur par défaut. J'avais initialement le code suivant, car je pense que cela facilite l'utilisation de l'API REST. Cependant, comme indiqué dans les commentaires, il n'est pas nécessaire de répondre à cette question. Vous pouvez simplement utiliser le point 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' );

Ensuite, dans my-script.js, utilisez simplement 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();
});
5
Nathan Johnson