WordPress REST Criar postagem de tipo personalizado

4

Estou usando a API REST para criar postagens.

Eu posso criar postagens normais, mas gostaria de criar postagens de tipo personalizado.

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

Estou tentando POST para o URL acima com dados como

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

que não cria a postagem do tipo custom_type , ao contrário, a postagem normal é criada.

Eu tentei postar em

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

com os dados,

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

mas ainda cria post normal.

Eu também tentei enviar os dados como

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

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

que também cria post normal.

Estou usando o POSTMAN para enviar os dados. O que mais devo tentar?

Qualquer ajuda ou sugestão apreciada!

    
por linktoahref 14.02.2018 / 14:15

1 resposta

5

Verifique se o tipo de postagem é exibido na 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 );

O endpoint para criar uma postagem seria, então, http://example.com/wp-json/wp/v2/myslug .

Editar:

O que precede é tudo o que é necessário para que um tipo de postagem personalizada esteja disponível como um ponto de extremidade REST usando o WP_REST_Posts_Controller padrão. Inicialmente tive o seguinte código, porque acho que é mais fácil usar a API REST. No entanto, como apontado nos comentários, não é necessário responder a essa pergunta. Você pode simplesmente usar o endpoint.

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

Então, em my-script.js, use o 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();
});
    
por Nathan Johnson 14.02.2018 / 17:33