Программное создание записи (произвольного типа записи) с произвольными полями

25 дек. 2012 г., 09:43:22
Просмотры: 28.5K
Голосов: 23

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

Возможно ли это сделать и если да, то как?

0
Все ответы на вопрос 3
5
45

Используйте 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);
}
25 дек. 2012 г. 10:32:01
Комментарии

Работает отлично даже на WordPress 4.4.2 :) !

jave.web jave.web
11 апр. 2016 г. 09:12:50

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

Andreas Andreas
21 мая 2019 г. 14:08:37

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

webaware webaware
22 мая 2019 г. 01:48:17

Спасибо @webaware :)

Andreas Andreas
23 мая 2019 г. 02:58:14

Работает отлично даже на WordPress 5.1 :) !

I am the Most Stupid Person I am the Most Stupid Person
6 июн. 2019 г. 07:43:36
0
14

В дополнение к отличному ответу @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) {
    // сработало :)
}

23 мая 2019 г. 03:04:33
1

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

26 дек. 2012 г. 20:08:59
Комментарии

Мне нравится это решение, особенно если вы передаёте его клиенту, который хочет самостоятельно управлять формой.

webaware webaware
27 дек. 2012 г. 01:42:46