Using WordPress ‘after_plugin_row’ PHP action

The after_plugin_row WordPress PHP action fires after each row in the Plugins list table, allowing you to perform actions or modify the output for each plugin row.

Table of contents

Usage

add_action('after_plugin_row', 'your_custom_function', 10, 3);

function your_custom_function($plugin_file, $plugin_data, $status) {
    // your custom code here
}

Parameters

  • $plugin_file (string) – Path to the plugin file relative to the plugins directory.
  • $plugin_data (array) – An array of plugin data. See get_plugin_data() and the ‘plugin_row_meta’ filter for the list of possible values.
  • $status (string) – Status filter currently applied to the plugin list. Possible values are: ‘all’, ‘active’, ‘inactive’, ‘recently_activated’, ‘upgrade’, ‘mustuse’, ‘dropins’, ‘search’, ‘paused’, ‘auto-update-enabled’, ‘auto-update-disabled’.

More information

See WordPress Developer Resources: after_plugin_row

Examples

Display a custom message for a specific plugin

Display a custom message under the row of a specific plugin in the Plugins list table.

add_action('after_plugin_row', 'display_custom_message', 10, 3);

function display_custom_message($plugin_file, $plugin_data, $status) {
    if ('your-plugin/your-plugin.php' == $plugin_file) {
        echo '<tr><td colspan="3" style="color: #ff0000;">This is a custom message for the Your Plugin.</td></tr>';
    }
}

Show a warning for outdated plugins

Show a warning message for plugins that haven’t been updated in over a year.

add_action('after_plugin_row', 'warn_outdated_plugins', 10, 3);

function warn_outdated_plugins($plugin_file, $plugin_data, $status) {
    $last_updated = strtotime($plugin_data['LastUpdated']);
    if ((time() - $last_updated) > 31536000) { // 1 year in seconds
        echo '<tr><td colspan="3" style="color: #ff0000;">Warning: This plugin has not been updated in over a year. Consider finding an alternative.</td></tr>';
    }
}

Add a custom link to the row actions of each plugin.

add_action('after_plugin_row', 'add_custom_link', 10, 3);

function add_custom_link($plugin_file, $plugin_data, $status) {
    $custom_link = '<a href="https://example.com" target="_blank">Visit Custom Link</a>';
    echo '<script>jQuery(document).ready(function() { jQuery("#' . esc_attr($plugin_file) . ' .row-actions").append(" | ' . addslashes($custom_link) . '"); });</script>';
}

Display the total number of active plugins

Display the total number of active plugins at the bottom of the Plugins list table.

add_action('after_plugin_row', 'display_total_active_plugins', 10, 3);

function display_total_active_plugins($plugin_file, $plugin_data, $status) {
    static $active_plugins_count = 0;

    if ('active' == $status) {
        $active_plugins_count++;
    }

    if ($GLOBALS['wp_list_table']->is_last_page()) {
        echo '<tr><td colspan="3">Total Active Plugins: ' . $active_plugins_count . '</td></tr>';
    }
}

Highlight premium plugins

Highlight premium plugins in the Plugins list table by changing their background color.

add_action('after_plugin_row', 'highlight_premium_plugins', 10, 3);

function highlight_premium_plugins($plugin_file, $plugin_data, $status) {
    $premium_plugins = array(
        'premium-plugin-1/premium-plugin-1.php',
        'premium-plugin-2/premium-plugin-2.php',
    );

    if (in_array($plugin_file, $premium_plugins)) {
        echo '<script>jQuery(document).ready(function() { jQuery("#' . esc_attr($plugin_file) . '").css("background-color", "#f0f8ff"); });</script>';
    }
}

Show plugin ratings

Display the rating of each plugin in the Plugins list table, based on your predefined list of ratings.

add_action('after_plugin_row', 'show_plugin_ratings', 10, 3);

function show_plugin_ratings($plugin_file, $plugin_data, $status) {
    $plugin_ratings = array(
        'plugin-1/plugin-1.php' => 4.5,
        'plugin-2/plugin-2.php' => 3.0,
        'plugin-3/plugin-3.php' => 5.0,
    );

    if (array_key_exists($plugin_file, $plugin_ratings)) {
        echo '<tr><td colspan="3">Rating: ' . $plugin_ratings[$plugin_file] . ' stars</td></tr>';
    }
}

These examples should help you understand how to use the after_plugin_row action in various scenarios. Feel free to modify the code according to your needs.

Leave a Comment

Your email address will not be published. Required fields are marked *