Регистрация custom post type делается всего одной функцией на хуке init, ссылку на доку смотрите в ответе
Max Medar. А вот с кастомными полями чуток сложнее - нужно регистрировать метабокс, в него рендерить поля, потом делать их обработчик, валидацию и запись/обновление в БД. Советую поставить Advanced Custom Fields или аналогичный плагин и не париться.