Программное создание записи (произвольного типа записи) с произвольными полями
У меня есть произвольный тип записи 'Participant' с множеством произвольных полей. Также у меня есть форма с соответствующими полями ввода для пользователя. Когда пользователь отправляет форму, я хочу, чтобы создавалась новая запись, где каждое произвольное поле содержит значение, выбранное пользователем.
Возможно ли это сделать и если да, то как?

Используйте wp_insert_post() и add_post_meta(), вот так:
// добавляем запись и устанавливаем категорию
$post_id = wp_insert_post(array (
'post_type' => 'your_post_type',
'post_title' => $your_title,
'post_content' => $your_content,
'post_status' => 'publish',
'comment_status' => 'closed', // если нужно
'ping_status' => 'closed', // если нужно
));
if ($post_id) {
// добавляем метаданные записи
add_post_meta($post_id, '_your_custom_1', $custom1);
add_post_meta($post_id, '_your_custom_2', $custom2);
add_post_meta($post_id, '_your_custom_3', $custom3);
}

в настоящее время вы можете просто добавить мета-поля с помощью ключа meta_input в wp_insert_post: 'meta_input' => ['_your_custom_1' => $custom1, '_your_custom_2' => custom2]

Хорошее замечание, @Andreas, предлагаю вам добавить это как новый ответ и дать ему возможность набирать голоса. Это должно быть правильным ответом сейчас.

В дополнение к отличному ответу @webaware выше, начиная с WordPress 4.4.0 это можно обрабатывать полностью через вызов wp_insert_post:
$post_id = wp_insert_post(array (
'post_content' => $content,
'post_title' => $title,
'post_type' => 'your_custom_post_type',
'post_status' => 'publish',
// простой массив ключ / значение
'meta_input' => array(
'your_custom_key1' => 'your_custom_value1',
'your_custom_key2' => 'your_custom_value2'
// и так далее ;)
)
));
if ($post_id) {
// сработало :)
}

Этого можно легко добиться с помощью плагина Gravity Forms. Вы можете создать форму, которая заполняет пользовательский тип записи (Custom Post Type) в админке. Эту запись можно настроить для отображения в виде черновика или опубликованной. Без проблем можно добавлять пользовательские поля. В моём случае я использовал этот метод для сбора отзывов клиентов.
