Pubblicazioni Anonime - Come Creare un Modulo di Invio in WordPress
Questa è una ripubblicazione di una domanda posta su stackoverflow, e mi è stato riferito di pubblicarla su questo sito:
Il mio cliente vuole creare un modulo sul suo nuovo sito WP che, una volta compilato e inviato, venga inviato alla sua coda di post in attesa di approvazione. Se approvato, verrà pubblicato sul suo sito nella sezione "blog" (che in realtà è una raccolta di tablature per chitarra). Il modulo sarebbe personalizzato e con campi personalizzati. Di seguito c'è il modulo, ma nella vecchia grafica prima che io lo aggiornassi.
Quindi, quanto sarebbe difficile realizzarlo? Il cliente non vuole che sia nel pannello di amministrazione di WP, cosa che avevo iniziato a fare, ma all'esterno in una pagina come /contribuisci

Puoi utilizzare i seguenti plugin per la pubblicazione front-end:
Oppure puoi creare il form manualmente
<!-- Form per il nuovo articolo -->
<div id="postbox">
<form id="new_post" name="new_post" method="post" action="">
<p><label for="title">Titolo</label><br />
<input type="text" id="title" value="" tabindex="1" size="20" name="title" />
</p>
<p><label for="description">Descrizione</label><br />
<textarea id="description" tabindex="3" name="description" cols="50" rows="6"></textarea>
</p>
<p><?php wp_dropdown_categories( 'show_option_none=Categoria&tab_index=4&taxonomy=category' ); ?></p>
<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>
<!--// Form per il nuovo articolo -->
e processarlo
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && ($_POST['action']== 'new_post')) {
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'];
$new_post = array(
'post_title' => $title,
'post_content' => $description,
'post_category' => $_POST['cat'],
'tags_input' => $tags,
'post_status' => 'draft'
);
wp_insert_post($new_post);
}
Assicurati di verificare il nonce e di sanitizzare i campi del form.
AGGIORNAMENTO
In base al tuo codice gist e al commento, modifica la tua funzione in questo modo:
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && ($_POST['action']== 'new_post')) {
$has_errors = false;
if (isset ($_POST['title'])) {
$title = $_POST['title'];
} else {
echo 'Inserisci un titolo';
$has_errors = true;
}
if (isset ($_POST['performer'])) {
$performer = $_POST['preformer'];
} else {
echo 'Inserisci un esecutore';
$has_errors = true;
}
if (isset ($_POST['composer'])) {
$composer = $_POST['composer'];
} else {
echo 'Inserisci un compositore';
$has_errors = true;
}
if (isset ($_POST['tablature'])) {
$tablature = $_POST['tablature'];
} else {
echo 'Inserisci il contenuto';
$has_errors = true;
}
$tags = $_POST['post_tags'];
if (!$has_errors){
//salva <titolo> di: <esecutore>
$title .= " di: " .$performer;
//salva Composto da: <compositore> Eseguito da: <esecutore> <tablature>
$content = "<h4>Composto da: ". $composer."</h4><br/><h4>Eseguito da: ".$performer."</h4><br/>".$tablature;
$new_post = array(
'post_title' => $title,
'post_content' => $content,
'post_category' => $_POST['cat'],
'tags_input' => $tags,
'post_status' => 'draft'
);
$pid = wp_insert_post($new_post);
//salva email e mittente come post meta in campi personalizzati
update_post_meta($pid, 'submiter_email', urldecode($_POST['email']));
update_post_meta($pid, 'submiter_name', urldecode($_POST['submitter']));
}
}

Non sono un programmatore PHP, né pretendo di esserlo, ma ecco cosa ho creato: https://gist.github.com/810767. L'idea è che l'output sia "<titolo canzone> di <artista>" nel titolo, e "<h4>Composto da: <compositore></h4><br/><h4>Eseguito da: <artista></h4><br/><descrizione>" nell'area del contenuto. Questo codice ha creato una nuova bozza di articolo, ma quella bozza era vuota, a parte il titolo. Penso di essere vicino, ma non ancora arrivato. Grazie mille per questa risposta, mi ha sicuramente messo sulla strada giusta!!

Grazie ancora per il tuo aiuto! Questo è il punto in cui mi trovo adesso, ed è quasi finito, ma sono bloccato su tre cose. Le categorie non vengono pubblicate, il titolo viene pubblicato come <title> by: <title> invece di <title> by: <performer>, e il titolo sembra apparire inizialmente nell'elenco dei post, ma quando clicco sul titolo per andare alla pagina di modifica del post, la barra del titolo è vuota? https://gist.github.com/35ad2c03a340bb324109

Quindi, oltre al campo del titolo che appare vuoto quando si entra nella pagina 'modifica post', il permalink HA il titolo della canzone in forma di permalink. Strano. Sembra anche che il form stia producendo "Performed by: <song title>". Apprezzo molto il tuo aiuto!

Non l'ho verificato, ma questo plugin probabilmente ti mostra come affrontarlo. Ecco un altro, oppure potresti creare un utente speciale chiamato 'anonimo' e assegnargli i permessi di 'autore'. Probabilmente vorrai fare attenzione a concedergli i permessi di modifica o eliminazione.

In precedenza avevo cercato di far funzionare questo con TDOMF, ma il 'modello hack' era troppo complicato per me. Se non riesco a farlo funzionare da solo (intendendo, con l'aiuto di persone come te) proverò con la pubblicazione anonima! Grazie!
