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

Публикация записей через фронтенд сводится к отображению формы и её обработке:
Форма:
<!-- Форма добавления новой записи -->
<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);
// Добавляем таксономии
}

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

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

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

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

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

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

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

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

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

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