Comment puis-je ajouter des méta-boîtes au formulaire de soumission postérieur? Semblable à la soumission de publication frontale qui crée de nouvelles publications, les réponses au formulaire doivent aller directement dans les boîtes à méta de publication.
Exemple de code de boîte méta pour post du back-end au front-end
<?php
function admin_init(){
add_meta_box("mia_post_meta", "Information", "mia_post_meta", "post", "normal", "high");
}
add_action("admin_init", "admin_init");
function mia_post_meta($callback_args) {
global $post;
$post_type = $callback_args->post_type;
$temp_array = array();
$temp_array = maybe_unserialize(get_post_meta($post->ID,'mia_ev_settings',true));
$mia_ev_bday = isset( $temp_array['mia_ev_bday'] ) ? $temp_array['mia_ev_bday'] : '';
echo '<script type="text/javascript">jQuery(document).ready(function(){jQuery("#mia_ev_bday").simpleDatepicker();});</script>';
?>
<div id="mia_custom_settings" style="margin: 13px 0 17px 4px;">
<div class="mia_fs_setting" style="margin: 13px 0 26px 4px;">
<label for="mia_ev_bday" style="color: #000; font-weight: bold;"> Birthday: </label>
<input type="text" class="small-text" value="<?php echo $mia_ev_bday; ?>" id="mia_ev_bday" name="mia_ev_bday" size="67" />
<br />
<small style="position: relative; top: 8px;">ex: <code>13 Jan, 2011</code></small>
</div>
</div>
<?php
}
add_action('save_post', 'save_details');
function save_details($post_id){
global $post;
$temp_array = array();
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE )
return $post_id;
$temp_array['mia_ev_bday'] = isset($_POST["mia_ev_bday"]) ? $_POST["mia_ev_bday"] : '';
update_post_meta( $post->ID, "mia_ev_settings", $temp_array );
}
function mia_bday_scripts(){
wp_register_script('datepicker', get_bloginfo('template_directory').'/js/date/datepicker.js', array('jquery'));
wp_enqueue_script('datepicker');
}
function mia_style_css(){
wp_register_style( 'datepicker', get_bloginfo('template_directory').'/js/date/datepicker.css');
wp_enqueue_style('datepicker');
}
add_action('admin_print_scripts', 'mia_date_scripts');
add_action('admin_print_styles', 'mia_style_css');
?>
Le mia_ev_bday devrait également être rempli par les utilisateurs du front-end.
EXEMPLE DE FORME sur Front-end voir Image
Les informations ajoutées par les utilisateurs dans le formulaire doivent être affichées dans l'article et apparaître dans la méta-boîte principale, dans les boîtes de méta personnalisées.
Vous pouvez créer un formulaire comportant une action de votre script php de traitement de formulaire. Dans le script php, vous pouvez vérifier si le formulaire a été soumis et, le cas échéant, créer une variable pour les champs du formulaire à l'aide de la variable $ _POST. Puis créez le $ post = array () pour configurer le post meta array, et utilisez le wp_insert_post ($ post); insérer le post.
Voici un exemple de code de traitement de formulaire que j'utilise pour le formulaire de publication frontend utilisé sur http://WPHonors.com . Cela fonctionne pour le type de publication personnalisé que j'ai créé pour elle, qui avait un formulaire de base configuré, avec un champ masqué post_type avec le type de publication comme valeur.
if( $_POST['post_type'] == 'site' ) {
$title = $_POST['title'];
$desc = $_POST['description'];
$siteurl = $_POST['siteurl'];
$cat = array( $_POST['cat'] );
$tags = trim( $_POST['tags'] );
if(!isset($title)) { echo '<div class="error">Title required.</div>'; }
if(!isset($desc)) { echo '<div class="error">Description required.</div>'; }
if(!isset($siteurl)) { echo '<div class="error">URL required.</div>'; }
if($cat == -1) { echo '<div class="error">Select a category.</div>'; }
if(!isset($tags)) { echo '<div class="error">Must use at least one tag.</div>'; }
if (!current_user_can( 'publish_posts')) { $poststatus = 'draft'; } else { $poststatus = 'publish'; }
//$insert = new TypeSites();
$post = array(
'post_title' => $title,
'post_content' => $desc,
'siteurl' => $siteurl,
'post_category' => $cat,
'tags_input' => $tags,
'post_status' => $poststatus,
'post_type' => 'site'
);
wp_insert_post( $post );
}
La meilleure solution consiste à extraire les méta-boîtes existantes sur votre page sans avoir à les recréer. Pas besoin de faire de travail supplémentaire, utilisez simplement ce code:
// Load necessary admin files
include( ABSPATH . 'wp-admin/includes/template.php' );
include( ABSPATH . 'wp-admin/includes/post.php' );
// Add meta boxes
do_action('add_meta_boxes', $post_type, $post);
do_action('add_meta_boxes_' . $post_type, $post);
// Show Meta Boxes
do_meta_boxes( $post_type, 'normal', $post );
do_meta_boxes( $post_type, 'advanced', $post );
do_meta_boxes( $post_type, 'side', $post );
Tant que vous avez configuré vos autres variables $ _POST et que vous utilisez wp_insert_post (), l'action 'save_post' est appelée et les données de vos métaboxes sont sauvegardées.
Après votre code wp_insert_post, utilisez:
add_post_meta($post_id, 'name-of-custom-field', $customField, true);
changez le 'nom-du-champ-personnalisé' et ajoutez un élément de formulaire $ customField à insérer dans les données de votre formulaire.