メタボックスフィールドの設計と配置を完全に制御するのに最適なメタボックススクリプトを使用しています。問題が1つあります。スクリプトを見つけた場所を覚えていないため、選択ボックスを追加する必要があります。このスクリプトは、ほとんどのメタボックススクリプトのように配列を使用しません。
選択ボックスを正常に追加するために使用できる機能は何ですか?
// 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
基本的にfunction inventory_information()
にselectドロップダウンのhtmlを追加する必要があります。これは実際にメタボックスを表示する関数です。
// 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>';
}
それから、そのフィールドをあなたのメタボックスの保存関数txpbs_save_events_meta
に追加するだけです。
// 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
}
}
お役に立てれば。