I found a useful blog post on how to add text fields to the “link management” admin menu in WordPress: http://planetozh.com/blog/2008/02/wordpress-snippet-add_meta_box/
But how do you save this information into your database? This is a three step approach.
1. Add the fields to you database:
add_action('activate_geo_blogroll.php','geo_blogroll_update_db');
function geo_blogroll_update_db(){
global $wpdb;
$wpdb->query("ALTER TABLE $wpdb->links ADD COLUMN link_city varchar(255);");
$wpdb->query("ALTER TABLE $wpdb->links ADD COLUMN link_state varchar(255);");
}
2. Add text fields to the link admin screen:
add_action('admin_menu', 'add_geo_meta_to_links');
function add_geo_meta_to_links() {
add_meta_box ('geo_link', 'Link Geography', 'geo_blogroll_form', 'link');
}
function geo_blogroll_form () {
global $link;
?>
<table class="form-table" style="width: 100%;" cellspacing="2" cellpadding="5">
<tr class="form-field">
<th value="top" scope="row"><label for="blog_city"><?php _e('City'); ?></label></th>
<td>
<input name="blog_city" type="text" id="blog_city"
value="<?php echo $link->link_city; ?>" style="width: 95%" />
</td>
</tr>
<tr class="form-field">
<th value="top" scope="row"><label for="blog_state"><?php _e('State'); ?></label></th>
<td>
<input name="blog_state" type="text" id="blog_state"
value="<?php echo $link->link_state; ?>" style="width: 95%" />
</td>
</tr>
</table>
<?php } ?>
3. And finally save this information to the database every time someone saves a new link or updates an old link:
add_action('edit_link', 'geo_blogroll_save_meta');
add_action('add_link', 'geo_blogroll_save_meta');
function geo_blogroll_save_meta ($link_id){
global $wpdb;
$sql_statement = "UPDATE wp_links SET link_city='".$_POST['blog_city'].
"', link_state='".$_POST['blog_state'].
"' WHERE link_id =".$link_id.";";
$wpdb->query($sql_statement);
}