Программно опубликовать сообщение (пользовательский тип сообщения) с пользовательскими полями


17

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

Можно ли это сделать и если да, то как?

Ответы:


29

Используйте wp_insert_post () и add_post_meta () , вот так:

// insert the post and set the category
$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',   // if you prefer
    'ping_status' => 'closed',      // if you prefer
));

if ($post_id) {
    // insert post meta
    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);
}

Работает как шарм даже на WordPress 4.4.2 :)!
jave.web

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

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

Спасибо @webaware :)
Андреас

Работает как шарм даже на WordPress 5.1 :)!
Я самый глупый человек

6

В дополнение к замечательному ответу @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',

    // some simple key / value array
    'meta_input' => array(
        'your_custom_key1' => 'your_custom_value1',
        'your_custom_key2' => 'your_custom_value2'
        // and so on ;)
    )
));

if ($post_id) {
    // it worked :)
}

4

Это может быть достигнуто довольно легко с помощью плагина Gravity Forms . Вы можете создать форму, которая заполняет пользовательский тип сообщения в бэкэнде. Этот пост можно настроить на то, чтобы он отображался как черновик или как опубликованный. Нет проблем с добавлением пользовательских полей. В моем случае я использовал его для сбора отзывов клиентов.


Мне нравится это решение, особенно если вы доставляете его клиенту, который хочет самостоятельно управлять формой.
webaware 26.12.12
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.