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" />
Milage: <input type="text" name="_dappcf_i_mileage" value="' . $milage . '" class="widefat" style="width:80px" />
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" />
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
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" />
Milage: <input type="text" name="_dappcf_i_mileage" value="' . $milage . '" class="widefat" style="width:80px" />
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" />
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.