Ceci est un repost d'une question posée sur stackoverflow, et a été renvoyé à ce site:
Mon client souhaite créer sur son nouveau WP site un formulaire qui, une fois rempli et soumis, sera soumis à la file d'attente de son poste administrateur pour approbation. S'il approuve, il est publié sur son site dans le "blog" (qui est en fait un tas de guitare comme des onglets). Le formulaire serait personnalisé et comporterait des champs personnalisés. Vous trouverez ci-dessous le formulaire, mais dans l'ancien modèle avant de procéder à une actualisation.
Alors, comment cela serait-il difficile? Il ne le veut pas dans le WP panneau d'administration que j'ai commencé à faire, mais à l'extérieur dans une page comme/contribue
vous pouvez utiliser des plugins pour la publication frontale:
Ou vous pouvez créer le formulaire vous-même
<!-- New Post Form -->
<div id="postbox">
<form id="new_post" name="new_post" method="post" action="">
<p><label for="title">Title</label><br />
<input type="text" id="title" value="" tabindex="1" size="20" name="title" />
</p>
<p><label for="description">Description</label><br />
<textarea id="description" tabindex="3" name="description" cols="50" rows="6"></textarea>
</p>
<p><?php wp_dropdown_categories( 'show_option_none=Category&tab_index=4&taxonomy=category' ); ?></p>
<p><label for="post_tags">Tags</label>
<input type="text" value="" tabindex="5" size="16" name="post_tags" id="post_tags" /></p>
<p align="right"><input type="submit" value="Publish" tabindex="6" id="submit" name="submit" /></p>
<input type="hidden" name="action" value="new_post" />
<?php wp_nonce_field( 'new-post' ); ?>
</form>
</div>
<!--// New Post Form -->
et le traiter
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && ($_POST['action']== 'new_post')) {
if (isset ($_POST['title'])) {
$title = $_POST['title'];
} else {
echo 'Please enter a title';
}
if (isset ($_POST['description'])) {
$description = $_POST['description'];
} else {
echo 'Please enter the content';
}
$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);
}
Et assurez-vous de vérifier la non-suppression et la désinfection des champs de formulaire.
Selon votre code Gist et votre commentaire, changez votre fonction pour ceci:
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) && ($_POST['action']== 'new_post')) {
$has_errors = false;
if (isset ($_POST['title'])) {
$title = $_POST['title'];
} else {
echo 'Please enter a title';
$has_errors = true;
}
if (isset ($_POST['performer'])) {
$performer = $_POST['preformer'];
} else {
echo 'Please enter a performer';
$has_errors = true;
}
if (isset ($_POST['composer'])) {
$composer = $_POST['composer'];
} else {
echo 'Please enter a composer';
$has_errors = true;
}
if (isset ($_POST['tablature'])) {
$tablature = $_POST['tablature'];
} else {
echo 'Please enter the content';
$has_errors = true;
}
$tags = $_POST['post_tags'];
if (!$has_errors){
//save <title> by: <preformer>
$title .= " by: " .$performer;
//save Composed by: <composer> Performed by: <performer> <tablature>
$content = "<h4>Composed by: ". $composer."</h4><br/><h4>Performed by: ".$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);
//save email and submmiter as post meta in custom fields
update_post_meta($pid, 'submiter_email', urldecode($_POST['email']));
update_post_meta($pid, 'submiter_name', urldecode($_POST['submitter']));
}
}
Je ne l'ai pas vérifié, mais ce plugin vous indique probablement comment vous en approcher. Voici un autre , ou vous pouvez créer un utilisateur spécial appelé "anonymous" et lui donner les permissions "author". Vous voulez probablement faire attention à ne pas leur donner des autorisations de modification ou de suppression.