If you are plugin developer, it’s very important to give as much info about the plugin updates as you can before the blog admins update the plugin to a new version. Also, some of the plugin control panels go into different menus, and it’s a good idea to have direct links on the plugins panel also. And both things are easy to achieve.
Additional options
Each plugin row on the Plugins panel has several standard actions. You can add more actions like the link to the settings panel or anything else. You need to add filter function that will be used to add this action(s).
<?php
add_filter('plugin_action_links', 'add_plugin_links', 10, 2);
function add_plugin_links($links, $file) {
static $this_plugin;
if (!$this_plugin) $this_plugin = plugin_basename(__FILE__);
if ($file == $this_plugin ){
$settings_link = '<a href="index.php">Settings</a>';
array_unshift($links, $settings_link);
}
return $links;
}
?>
Lines 5 to 8 are there to ensure that you add settings only to your own plugin. Lines 9 and 10 are actually adding new action to the plugin row. This example adds link to the dashboard, you can change it to whatever you need. Don’t forget to return $links because this is a filter not an action.
Additional plugin info
WordPress shows description from your plugin file. And when the new version is available for update, there is no detailed info about the the update. Adding that is not very hard.
<?php
add_action('after_plugin_row', 'add_plugin_row', 10, 2);
function add_plugin_row($links, $file) {
static $this_plugin;
global $wp_version;
if (!$this_plugin) $this_plugin = plugin_basename(__FILE__);
if ($file == $this_plugin ){
$current = get_option('update_plugins');
if (!isset($current->response[$file])) return false;
$columns = substr($wp_version, 0, 3) >= "2.8" ? 3 : 5;
$url = "http://www.yoursite.com/info.txt";
$update = wp_remote_fopen($url);
echo '<td colspan="'.$columns.'">';
echo $update;
echo '</td>';
}
}
?>
Function checks to see if you add row to your plugin as the previous function does. Lines 9 and 10 will check if there is an updated found for your plugin. If no update is found, additional row will not be added. You can remove this part, and added row will be always visible. My intention with this code is to display details about the plugin update, you can change it to anything else. Important thing to notice is the difference between WP 2.8 and older versions. Number of columns in plugins table is different, so we need to check for WP version. Also, you need to echo only TD part of the row, WordPress already echoes TR tag. Function will get contents of the file from $url variable and will echo that file in the row.
Example above shows both functions used in GD Press Tools plugin. First row is a standard plugin info, and you can see Settings action added by first function. Second row is WordPress info that plugin upgrade is available. Third row is info displayed by second function that has retrieved this changes notice from my website.
WordPress 2.7 introduces new action and filter that can replace the one we used here that will point only to your plugin and eliminate the need to check if function is called for your plugin’s row:
plugin_action_links => plugin_action_links_$plugin_name after_plugin_row => after_plugin_row_$plugin_name
Variable $plugin_name should be replaced by your plugin valid name that includes plugin folder and file. For GD Press Tools this is: gd-press-tools/gd-press-tools.php.
More WordPress tips will follow soon.

Thanks, this is very useful for me.