如何向这个Metabox代码添加选择菜单?

时间:2011-02-18 作者:m-torin

我正在使用一个元盒脚本,它非常适合绝对控制元盒字段的设计和放置。有一个问题:我不记得在哪里找到了脚本,需要添加一个选择框。此脚本不像大多数metabox脚本那样使用数组。

我可以使用什么函数成功添加选择框?

// 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 个回复
最合适的回答,由SO网友:Bainternet 整理而成

基本上,您需要在function inventory_information() 这是实际显示元盒的函数:

// 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>\';
        }
然后只需将该字段添加到metabox保存函数中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
            }

        }
希望这有帮助。

结束

相关推荐

如何在菜单管理管理屏幕中添加自定义Metabox?

虽然我非常感谢wordpress核心团队最终集成了本机菜单管理功能,但我对一些我想更改的关键元素感到失望。我需要一种显示页面的方式,这种方式与显示分级类别的方式相同,而不是显示在列表中,并且我需要一种手动包括可以添加到菜单的链接的方式。如何做到这一点?提前感谢UPDATED所以,以下是我想做的两件事。当前,如果您转到默认的wordpress“菜单管理”管理屏幕,您可以选择在左侧显示“页面”元框。这里的问题是,当您单击“查看全部”选项卡时,没有一个页面的顺序正确,并且如果适用,它们也没有缩进。CURRENT