web-dev-qa-db-ja.com

このメタボックスコードに選択メニューを追加する方法

メタボックスフィールドの設計と配置を完全に制御するのに最適なメタボックススクリプトを使用しています。問題が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" /> &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

基本的に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" /> &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>';
        }

それから、そのフィールドをあなたのメタボックスの保存関数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
            }

        }

お役に立てれば。

3
Bainternet