web-dev-qa-db-fra.com

Comment ajouter un menu de sélection à ce code metabox?

J'utilise un script metabox qui fonctionne très bien pour avoir un contrôle absolu sur la conception et l'emplacement des champs de métabox. Il y a un problème: je ne me souviens pas où j'ai trouvé le script et je dois ajouter une zone de sélection. Ce script n'utilise pas de tableaux comme le font la plupart des scripts metabox.

Quelle fonction puis-je utiliser pour ajouter avec succès une boîte de sélection?

// Add the Inventory Meta Boxes

function add_inventory_metaboxes() {
    add_meta_box('inventory_information', 'Inventory Information', 'inventory_information', 'inventory', 'side', 'default');
}

// The Event Location Metabox

function inventory_information() {
    global $post;

    // Noncename needed to verify where the data originated
    echo '<input type="hidden" name="inventorymeta_noncename" id="inventorymeta_noncename" value="' .
    wp_create_nonce( plugin_basename(__FILE__) ) . '" />';

    // Get the location data if its already been entered
    $stocknum = get_post_meta($post->ID, '_dappcf_i_stocknum', true);
    $vin = get_post_meta($post->ID, '_dappcf_i_vin', true);
    $saleprice = get_post_meta($post->ID, '_dappcf_i_priceone', true);
    $internetprice = get_post_meta($post->ID, '_dappcf_i_pricetwo', true);
    $milage = get_post_meta($post->ID, '_dappcf_i_mileage', true);
    $carfaxurl = get_post_meta($post->ID, '_dappcf_i_carfaxurl', true);

    // Echo out the fields
    echo '<p>Stock #: <input type="text" name="_dappcf_i_stocknum" value="' . $stocknum  . '" class="widefat" style="width:80px" /> &nbsp;&nbsp;&nbsp; 
        Milage: <input type="text" name="_dappcf_i_mileage" value="' . $milage  . '" class="widefat"  style="width:80px" /> &nbsp;&nbsp;&nbsp; 
        VIN: <input type="text" name="_dappcf_i_vin" value="' . $vin  . '" class="widefat"  style="width:200px" />';
    echo '<p>Sale Price: <input type="text" name="_dappcf_i_priceone" value="' . $saleprice  . '" class="widefat"  style="width:80px" /> &nbsp;&nbsp;&nbsp; 
        Internet Price: <input type="text" name="_dappcf_i_pricetwo" value="' . $internetprice  . '" class="widefat"  style="width:80px" />';
    echo '<p>CarFax url: <input type="text" name="_dappcf_i_carfaxurl" value="' . $carfaxurl  . '" class="widefat"  style="width:170px" />';
}

// Save the Metabox Data

function txpbs_save_events_meta($post_id, $post) {

    // verify this came from the our screen and with proper authorization,
    // because save_post can be triggered at other times
    if ( !wp_verify_nonce( $_POST['inventorymeta_noncename'], plugin_basename(__FILE__) )) {
    return $post->ID;
    }

    // Is the user allowed to edit the post or page?
    if ( !current_user_can( 'edit_post', $post->ID ))
        return $post->ID;

    // OK, we're authenticated: we need to find and save the data
    // We'll put it into an array to make it easier to loop though.

    $station_meta['_dappcf_i_stocknum'] = $_POST['_dappcf_i_stocknum'];
    $station_meta['_dappcf_i_vin'] = $_POST['_dappcf_i_vin'];
    $station_meta['_dappcf_i_priceone'] = $_POST['_dappcf_i_priceone'];
    $station_meta['_dappcf_i_pricetwo'] = $_POST['_dappcf_i_pricetwo'];
    $station_meta['_dappcf_i_mileage'] = $_POST['_dappcf_i_mileage'];
    $station_meta['_dappcf_i_carfaxurl'] = $_POST['_dappcf_i_carfaxurl'];

    // Add values of $station_meta as custom fields

    foreach ($station_meta as $key => $value) { // Cycle through the $station_meta array!
        if( $post->post_type == 'revision' ) return; // Don't store custom data twice
        $value = implode(',', (array)$value); // If $value is an array, make it a CSV (unlikely)
        if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value
            update_post_meta($post->ID, $key, $value);
        } else { // If the custom field doesn't have a value
            add_post_meta($post->ID, $key, $value);
        }
        if(!$value) delete_post_meta($post->ID, $key); // Delete if blank
    }

}

add_action('save_post', 'txpbs_save_events_meta', 1, 2); // save the custom fields
1
torinagrippa

Fondamentalement, vous devez ajouter le code HTML de la liste déroulante de sélection à votre function inventory_information(), qui est la fonction qui affiche réellement le metabox:

// The Event Location Metabox

        function inventory_information() {
            global $post;

            // Noncename needed to verify where the data originated
            echo '<input type="hidden" name="inventorymeta_noncename" id="inventorymeta_noncename" value="' .
            wp_create_nonce( plugin_basename(__FILE__) ) . '" />';

            // Get the location data if its already been entered
            $stocknum = get_post_meta($post->ID, '_dappcf_i_stocknum', true);
            $vin = get_post_meta($post->ID, '_dappcf_i_vin', true);
            $saleprice = get_post_meta($post->ID, '_dappcf_i_priceone', true);
            $internetprice = get_post_meta($post->ID, '_dappcf_i_pricetwo', true);
            $milage = get_post_meta($post->ID, '_dappcf_i_mileage', true);
            $carfaxurl = get_post_meta($post->ID, '_dappcf_i_carfaxurl', true);

            //here you add the dropdown as value if already set so you add something like
            $my_dropdown = get_post_meta($post->ID, '_dappcf_i_dropdown', true);

            // Echo out the fields
            echo '<p>Stock #: <input type="text" name="_dappcf_i_stocknum" value="' . $stocknum  . '" class="widefat" style="width:80px" /> &nbsp;&nbsp;&nbsp; 
                Milage: <input type="text" name="_dappcf_i_mileage" value="' . $milage  . '" class="widefat"  style="width:80px" /> &nbsp;&nbsp;&nbsp; 
                VIN: <input type="text" name="_dappcf_i_vin" value="' . $vin  . '" class="widefat"  style="width:200px" />';
            echo '<p>Sale Price: <input type="text" name="_dappcf_i_priceone" value="' . $saleprice  . '" class="widefat"  style="width:80px" /> &nbsp;&nbsp;&nbsp; 
                Internet Price: <input type="text" name="_dappcf_i_pricetwo" value="' . $internetprice  . '" class="widefat"  style="width:80px" />';
            echo '<p>CarFax url: <input type="text" name="_dappcf_i_carfaxurl" value="' . $carfaxurl  . '" class="widefat"  style="width:170px" />';

            //here you add the HTML of the dropdown you add something like
            echo '<p>Select menu: <select name="_dappcf_i_dropdown" class="widefat">';
            echo '<option value="1"'. $my_dropdown == "1" ? ' selected="selected"' : ''. '>' . 'Option 1'. '</option>';
            echo '<option value="2"'. $my_dropdown == "2" ? ' selected="selected"' : ''. '>' . 'Option 2'. '</option>'; 
            echo '<option value="3"'. $my_dropdown == "3" ? ' selected="selected"' : ''. '>' . 'Option 3'. '</option>'; 
            echo '<option value="4"'. $my_dropdown == "4" ? ' selected="selected"' : ''. '>' . 'Option 4'. '</option>'; 

            //add as many as you need here

            echo '</select>';
        }

puis ajoutez simplement ce champ à votre fonction de sauvegarde metabox qui est txpbs_save_events_meta donc:

// Save the Metabox Data

        function txpbs_save_events_meta($post_id, $post) {

            // verify this came from the our screen and with proper authorization,
            // because save_post can be triggered at other times
            if ( !wp_verify_nonce( $_POST['inventorymeta_noncename'], plugin_basename(__FILE__) )) {
            return $post->ID;
            }

            // Is the user allowed to edit the post or page?
            if ( !current_user_can( 'edit_post', $post->ID ))
                return $post->ID;

            // OK, we're authenticated: we need to find and save the data
            // We'll put it into an array to make it easier to loop though.

            $station_meta['_dappcf_i_stocknum'] = $_POST['_dappcf_i_stocknum'];
            $station_meta['_dappcf_i_vin'] = $_POST['_dappcf_i_vin'];
            $station_meta['_dappcf_i_priceone'] = $_POST['_dappcf_i_priceone'];
            $station_meta['_dappcf_i_pricetwo'] = $_POST['_dappcf_i_pricetwo'];
            $station_meta['_dappcf_i_mileage'] = $_POST['_dappcf_i_mileage'];
            $station_meta['_dappcf_i_carfaxurl'] = $_POST['_dappcf_i_carfaxurl'];

            //here just add the dropdown field to the $station_meta array from the $_POST
            $station_meta['_dappcf_i_dropdown'] = $_POST['_dappcf_i_dropdown'];


            // Add values of $station_meta as custom fields

            foreach ($station_meta as $key => $value) { // Cycle through the $station_meta array!
                if( $post->post_type == 'revision' ) return; // Don't store custom data twice
                $value = implode(',', (array)$value); // If $value is an array, make it a CSV (unlikely)
                if(get_post_meta($post->ID, $key, FALSE)) { // If the custom field already has a value
                    update_post_meta($post->ID, $key, $value);
                } else { // If the custom field doesn't have a value
                    add_post_meta($post->ID, $key, $value);
                }
                if(!$value) delete_post_meta($post->ID, $key); // Delete if blank
            }

        }

J'espère que cela t'aides.

3
Bainternet