it-swarm.com.ru

Wordpress REST Создать сообщение пользовательского типа

Я использую API REST для создания сообщений.

Я умею создавать обычные посты, но я бы хотел создавать посты нестандартного типа.

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

Я пытаюсь POST на вышеуказанный URL с данными как

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

который не создает сообщение типа custom_type вместо обычного сообщения.


Я пытался опубликовать в

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

с данными,

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

но все равно это создает нормальный пост.


Я также попытался отправить данные как

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

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

который также создает нормальный пост.


Я использую POSTMAN для отправки данных. Что еще я должен попробовать?

Любая помощь или предложения приветствуются!

4
linktoahref

Убедитесь, что ваш тип сообщения отображается в 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 );

Конечной точкой для создания сообщения будет http://example.com/wp-json/wp/v2/myslug.

Правка:

Вышесказанное - это все, что нужно для того, чтобы пользовательский тип записи был доступен как конечная точка REST с использованием WP_REST_Posts_Controller по умолчанию. Первоначально у меня был следующий код, потому что я думаю, что он облегчает использование API REST. Однако, как указано в комментариях, нет необходимости отвечать на этот вопрос. Вы можете просто использовать конечную точку.

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

Тогда в my-script.js просто используйте 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