Formulario para Agregar Entradas a un Tipo de Publicación Personalizada
Básicamente quiero mostrar un formulario en mi blog (en una página específica) que permita a cualquier persona completarlo y que creará una entrada en un tipo de publicación personalizada.
Vi la respuesta una vez antes pero no puedo encontrarla ahora.

Publicar desde el front-end consiste en mostrar un formulario y procesarlo:
Formulario:
<!-- Formulario para nueva entrada -->
<div id="postbox">
<form id="new_post" name="new_post" method="post" action="">
<!-- Título de la entrada -->
<p><label for="title">Título</label><br />
<input type="text" id="title" value="" tabindex="1" size="20" name="title" />
</p>
<!-- Categoría de la entrada -->
<p><label for="Category">Categoría:</label><br />
<p><?php wp_dropdown_categories( 'show_option_none=Categoría&tab_index=4&taxonomy=category' ); ?></p>
<!-- Contenido de la entrada -->
<p><label for="description">Contenido</label><br />
<textarea id="description" tabindex="3" name="description" cols="50" rows="6"></textarea>
</p>
<!-- Etiquetas de la entrada -->
<p><label for="post_tags">Etiquetas:</label>
<input type="text" value="" tabindex="5" size="16" name="post_tags" id="post_tags" /></p>
<p align="right"><input type="submit" value="Publicar" tabindex="6" id="submit" name="submit" /></p>
<input type="hidden" name="action" value="new_post" />
<?php wp_nonce_field( 'new-post' ); ?>
</form>
</div>
El procesamiento:
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "new_post") {
// Validación básica del formulario para asegurar que hay contenido
if (isset ($_POST['title'])) {
$title = $_POST['title'];
} else {
echo 'Por favor ingresa un título';
}
if (isset ($_POST['description'])) {
$description = $_POST['description'];
} else {
echo 'Por favor ingresa el contenido';
}
$tags = $_POST['post_tags'];
// Agregar el contenido del formulario a $post como un array
$new_post = array(
'post_title' => $title,
'post_content' => $description,
'post_category' => array($_POST['cat']), // También usable para taxonomías personalizadas
'tags_input' => array($tags),
'post_status' => 'publish', // Opciones: publish, preview, future, draft, etc.
'post_type' => 'post_type_name' // 'post', 'page' o usar un tipo de entrada personalizado
);
// Guardar la nueva entrada
$pid = wp_insert_post($new_post);
// Insertar taxonomías
}

@Bainternet - Gracias, ahora ¿hay alguna manera de que el formulario redirija a la nueva publicación después de enviarlo?

@Bainternet - Gracias de nuevo, pero cuando coloco eso después de la función wp_insert_post
, obtengo un error que dice que no se pueden modificar los encabezados. ¿Dónde lo coloco?

wp_insert_post no modifica ningún encabezado ni genera ninguna salida, lo que me hace pensar que algo se está imprimiendo en tu código. Pega el código exacto que estás usando para poder analizarlo mejor.

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

Así es como deberías estructurar el código: http://pastebin.com/SRi2ZxWa

@Jared silent tiene razón, la parte de procesamiento debe ir antes del formulario

Hmm... algo curioso. He usado todas las variaciones de un formulario de publicación que puedo encontrar. Incluyendo esta. No logro que la parte de validación haga algo......

@MohannadQamara puedes usar lo siguiente después de $pid = wp_insert_post($new_post);
-- if( $pid ) { add_post_meta( $pid, 'post_meta_name', 'post meta value' ); }

@Bainternet ¿qué tal aplicar términos a una taxonomía específica para el tipo de contenido personalizado?

@Anagio considera Hacer una nueva pregunta y hacer referencia a esta.

Podría ser más sencillo usar un plugin para esto.
También podrías utilizar el excelente plugin Contact Form 7 junto con la extensión Post My CF7 Form que te permitirá guardar cualquier formulario personalizado en un tipo de entrada personalizada (custom post), incluyendo imágenes como adjuntos destacados, campos meta personalizados y entradas de tipo selección/casillas de verificación/botones de radio como taxonomías.
El plugin Post My CF7 Form tiene una funcionalidad muy completa que se puede aprovechar para personalizar y ajustar aún más la forma en que se guardan tus formularios. También hay una sección de documentación detallada.
