web-dev-qa-db-fra.com

Meta Boxes dans le formulaire de soumission postérieur

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.

3
Mia

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 );
}
3
jaredwilli

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.

0
Micah Wood

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.

0
Philip