Форма для добавления записей в произвольный тип записей

6 мар. 2011 г., 10:58:03
Просмотры: 32.1K
Голосов: 9

В основном я хочу отобразить форму в своем блоге (на определенной странице), которая позволит любому пользователю заполнить ее, и это создаст запись в произвольном типе записей (Custom Post Type).

Я видел ответ раньше, но сейчас не могу его найти.

2
Комментарии

Я знаю, что ты, скорее всего, хочешь сделать это самостоятельно, но недавно я начал работать с плагином Formidable, который отлично справляется с этой задачей. Есть бесплатная версия, возможно, тебе стоит посмотреть. http://wordpress.org/extend/plugins/formidable/

Dalton Rooney Dalton Rooney
24 янв. 2012 г. 22:13:11

Я пробовал Formidable. Но в бесплатной версии есть ограничения. Поля для даты, времени, скрытые поля и т.д. заблокированы.

Eugine Joseph Eugine Joseph
29 янв. 2017 г. 13:27:00
Все ответы на вопрос 2
13
13

Публикация записей через фронтенд сводится к отображению формы и её обработке:

Форма:

<!-- Форма добавления новой записи -->
<div id="postbox">
<form id="new_post" name="new_post" method="post" action="">

<!-- Заголовок записи -->
<p><label for="title">Заголовок</label><br />
<input type="text" id="title" value="" tabindex="1" size="20" name="title" />
</p>

<!-- Категория записи -->
<p><label for="Category">Категория:</label><br />
<p><?php wp_dropdown_categories( 'show_option_none=Категория&tab_index=4&taxonomy=category' ); ?></p>

<!-- Содержание записи -->
<p><label for="description">Содержание</label><br />
<textarea id="description" tabindex="3" name="description" cols="50" rows="6"></textarea>
</p>

<!-- Теги записи -->
<p><label for="post_tags">Теги:</label>
<input type="text" value="" tabindex="5" size="16" name="post_tags" id="post_tags" /></p>
<p align="right"><input type="submit" value="Опубликовать" tabindex="6" id="submit" name="submit" /></p>

<input type="hidden" name="action" value="new_post" />
<?php wp_nonce_field( 'new-post' ); ?>
</form>
</div>

Обработка:

if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) &&  $_POST['action'] == "new_post") {

    // Простая валидация формы, чтобы убедиться, что есть содержимое
    if (isset ($_POST['title'])) {
        $title =  $_POST['title'];
    } else {
        echo 'Пожалуйста, введите заголовок';
    }
    if (isset ($_POST['description'])) {
        $description = $_POST['description'];
    } else {
        echo 'Пожалуйста, введите содержимое';
    }
    $tags = $_POST['post_tags'];

    // Добавляем содержимое формы в массив $new_post
    $new_post = array(
        'post_title'    => $title,
        'post_content'  => $description,
        'post_category' => array($_POST['cat']),  // Также работает с пользовательскими таксономиями
        'tags_input'    => array($tags),
        'post_status'   => 'publish',           // Варианты: publish, preview, future, draft и др.
        'post_type'     => 'post_type_name'  // 'post', 'page' или имя пользовательского типа записи
    );
    // Сохраняем новую запись
    $pid = wp_insert_post($new_post); 
    // Добавляем таксономии
}
6 мар. 2011 г. 11:23:57
Комментарии

@Bainternet - Спасибо, а есть ли способ перенаправить форму на новый пост после его отправки?

Jared Jared
6 мар. 2011 г. 12:45:02

Да, wp_redirect(get_permalink($pid)); exit;

Bainternet Bainternet
6 мар. 2011 г. 12:55:21

@Bainternet - Еще раз спасибо, но когда я помещаю этот код после функции wp_insert_post, я получаю ошибку о невозможности изменить заголовки. Куда мне его вставить?

Jared Jared
6 мар. 2011 г. 22:37:44

Функция wp_insert_post не изменяет никакие заголовки и ничего не выводит, что заставляет меня думать, что что-то выводится в вашем коде. Пришлите точный код, который вы используете, чтобы я мог лучше разобраться.

Bainternet Bainternet
6 мар. 2011 г. 23:37:21

@Bainternet - http://pastebin.com/jTzryzAs

Jared Jared
7 мар. 2011 г. 05:11:19

Вот как должен выглядеть правильный код: http://pastebin.com/SRi2ZxWa

ariefbayu ariefbayu
9 мар. 2011 г. 00:56:17

@Jared silent прав, обработка должна быть перед формой

Bainternet Bainternet
9 мар. 2011 г. 01:07:52

Хм... Любопытно. Я перепробовал все варианты форм для постов, какие только смог найти. Включая этот. Но у меня никак не получается заставить работать валидацию...

Rev. Voodoo Rev. Voodoo
25 мар. 2011 г. 21:29:09

как добавить post_meta поля в эту форму?

Mohannad Qamara Mohannad Qamara
19 янв. 2012 г. 15:45:18

@MohannadQamara вы можете использовать следующий код после $pid = wp_insert_post($new_post); -- if( $pid ) { add_post_meta( $pid, 'post_meta_name', 'post meta value' ); }

Jared Jared
19 янв. 2012 г. 16:43:18

@Bainternet а как насчет назначения терминов определенной таксономии для пользовательского типа записи?

Anagio Anagio
16 дек. 2012 г. 10:43:29

@Anagio рассмотрите возможность задать новый вопрос со ссылкой на этот.

Bainternet Bainternet
16 дек. 2012 г. 13:26:00

@Bainternet сделаю это завтра, как только смогу опубликовать пример кода, чтобы показать, что я уже что-то пробовал. Нашел несколько руководств. Если не получится — опубликую.

Anagio Anagio
16 дек. 2012 г. 13:29:11
Показать остальные 8 комментариев
1

Возможно, будет проще использовать плагин для этой задачи.

Вы также можете воспользоваться отличным плагином Contact Form 7 вместе с расширением Post My CF7 Form, которое позволяет сохранять любые пользовательские формы в произвольные записи, включая изображения в качестве прикрепленных миниатюр, пользовательские мета-поля, а также данные из select, checkbox и radio input в качестве таксономий.

Плагин Post My CF7 Form обладает богатым функционалом, который можно использовать для дальнейшей настройки и изменения способа сохранения ваших форм. Также доступен подробный раздел документации.

17 окт. 2016 г. 11:35:46
Комментарии

вы должны упомянуть, что вы являетесь создателем плагина.

David Guida David Guida
22 июн. 2023 г. 04:54:54