Modulo per Aggiungere Articoli a un Custom Post Type
In pratica, voglio visualizzare un modulo sul mio blog (su una determinata pagina) che permetterà a chiunque di compilarlo e creerà un post in un custom post type.
Ho visto la risposta una volta prima ma ora non riesco a trovarla.

Pubblicare dal front-end consiste nel mostrare un modulo e processarlo:
modulo:
<!-- Modulo Nuovo Articolo -->
<div id="postbox">
<form id="new_post" name="new_post" method="post" action="">
<!-- titolo articolo -->
<p><label for="title">Titolo</label><br />
<input type="text" id="title" value="" tabindex="1" size="20" name="title" />
</p>
<!-- Categoria articolo -->
<p><label for="Category">Categoria:</label><br />
<p><?php wp_dropdown_categories( 'show_option_none=Categoria&tab_index=4&taxonomy=category' ); ?></p>
<!-- Contenuto articolo -->
<p><label for="description">Contenuto</label><br />
<textarea id="description" tabindex="3" name="description" cols="50" rows="6"></textarea>
</p>
<!-- tag articolo -->
<p><label for="post_tags">Tag:</label>
<input type="text" value="" tabindex="5" size="16" name="post_tags" id="post_tags" /></p>
<p align="right"><input type="submit" value="Pubblica" tabindex="6" id="submit" name="submit" /></p>
<input type="hidden" name="action" value="new_post" />
<?php wp_nonce_field( 'new-post' ); ?>
</form>
</div>
elaborazione:
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && $_POST['action'] == "new_post") {
// Effettua una validazione di base per verificare la presenza di contenuti
if (isset ($_POST['title'])) {
$title = $_POST['title'];
} else {
echo 'Inserisci un titolo';
}
if (isset ($_POST['description'])) {
$description = $_POST['description'];
} else {
echo 'Inserisci il contenuto';
}
$tags = $_POST['post_tags'];
// Aggiungi il contenuto del modulo a $post come array
$new_post = array(
'post_title' => $title,
'post_content' => $description,
'post_category' => array($_POST['cat']), // Utilizzabile anche per tassonomie personalizzate
'tags_input' => array($tags),
'post_status' => 'publish', // Scegli: publish, preview, future, draft, ecc.
'post_type' => 'post_type_name' //'post',page' o usa un custom post type se necessario
);
//salva il nuovo articolo
$pid = wp_insert_post($new_post);
//inserisci tassonomie
}

@Bainternet - Grazie, ora c'è un modo per fare in modo che il form reindirizzi al nuovo post dopo l'invio?

@Bainternet - Grazie ancora, ma quando inserisco questo dopo la funzione wp_insert_post
, ricevo un errore che dice non è possibile modificare gli header. Dove devo inserirlo?

wp_insert_post non modifica alcun header né emette alcun output, il che mi porta a pensare che ci sia qualcosa che viene visualizzato nel tuo codice, incolla il codice esatto che stai usando così potrò dare un'occhiata più approfondita

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

Ecco come dovresti strutturare il codice: http://pastebin.com/SRi2ZxWa

@Jared silent ha ragione, la parte di elaborazione deve venire prima del modulo

Mmm... sono un po' curioso. Ho provato ogni variazione possibile di un modulo di post che ho trovato. Incluso questo. Non riesco a far funzionare la parte di validazione......

@MohannadQamara puoi utilizzare il seguente codice dopo $pid = wp_insert_post($new_post);
-- if( $pid ) { add_post_meta( $pid, 'post_meta_name', 'post meta value' ); }

@Bainternet e per quanto riguarda l'applicazione di termini a una tassonomia specifica per il custom post type?

@Anagio considera di porre una nuova domanda facendo riferimento a questa.

Potrebbe essere più semplice utilizzare un plugin per fare questo.
Potresti anche usare l'eccellente plugin Contact Form 7 insieme all'estensione Post My CF7 Form, che ti permetterà di salvare qualsiasi modulo personalizzato in un custom post, inclusi immagini come allegati in evidenza, campi meta personalizzati e input di tipo select/checkbox/radio come tassonomie.
Il plugin Post My CF7 Form offre una ricca funzionalità che può essere sfruttata per personalizzare ulteriormente e modificare il modo in cui i tuoi moduli dovrebbero essere salvati. C'è anche una sezione documentazione dettagliata.
