# Autoloaded Options Inspector

> Adds Tools > Autoloaded Options showing the total size of options WordPress loads on every page and the 40 largest ones, with a button to stop autoloading any option that does not need it.

- Type: PHP
- Runs: Admin only
- Category: [Performance](https://wpide.com/library/category/performance/)
- Tags: database, autoload, options
- Author: WPIDE Team
- Installs: 0
- Updated: 2026-10-28
- Page: https://wpide.com/library/perf-autoload-inspector/

## Code

```php
add_action( 'admin_menu', function () {
    add_management_page( 'Autoloaded Options', 'Autoloaded Options', 'manage_options', 'wpide-autoload', function () {
        global $wpdb;

        $protected = array( 'siteurl', 'home', 'blogname', 'active_plugins', 'cron', 'template', 'stylesheet', 'rewrite_rules', 'permalink_structure', 'wp_user_roles', $wpdb->prefix . 'user_roles' );
        $autoload  = function_exists( 'wp_autoload_values_to_autoload' ) ? wp_autoload_values_to_autoload() : array( 'yes' );
        $in        = "'" . implode( "','", array_map( 'esc_sql', $autoload ) ) . "'";

        if ( isset( $_POST['wpide_noautoload'] ) && check_admin_referer( 'wpide_noautoload' ) && current_user_can( 'manage_options' ) ) {
            $name = sanitize_text_field( wp_unslash( $_POST['wpide_noautoload'] ) );
            if ( ! in_array( $name, $protected, true ) && function_exists( 'wp_set_option_autoload' ) ) {
                wp_set_option_autoload( $name, false );
                printf( '<div class="notice notice-success"><p>%s</p></div>', esc_html( 'Autoload turned off for ' . $name . '.' ) );
            }
        }

        $total = (int) $wpdb->get_var( "SELECT SUM(LENGTH(option_value)) FROM {$wpdb->options} WHERE autoload IN ($in)" );
        $rows  = $wpdb->get_results( "SELECT option_name, LENGTH(option_value) AS size FROM {$wpdb->options} WHERE autoload IN ($in) ORDER BY size DESC LIMIT 40" );

        echo '<div class="wrap"><h1>Autoloaded Options</h1>';
        printf( '<p>%s</p>', esc_html( sprintf( 'Autoloaded data loaded on every request: %s. Below about 800 KB is healthy.', size_format( $total, 1 ) ) ) );
        echo '<table class="widefat striped"><thead><tr><th>Option</th><th>Size</th><th></th></tr></thead><tbody>';
        foreach ( $rows as $row ) {
            printf( '<tr><td><code>%s</code></td><td>%s</td><td>', esc_html( $row->option_name ), esc_html( size_format( (int) $row->size, 1 ) ) );
            if ( ! in_array( $row->option_name, $protected, true ) && 0 !== strpos( $row->option_name, '_transient' ) ) {
                echo '<form method="post" style="margin:0" onsubmit="return confirm(\'Stop autoloading this option?\');">';
                wp_nonce_field( 'wpide_noautoload' );
                echo '<button class="button button-small" name="wpide_noautoload" value="' . esc_attr( $row->option_name ) . '">Stop autoloading</button></form>';
            }
            echo '</td></tr>';
        }
        echo '</tbody></table></div>';
    } );
} );
```

## Notes

Turning autoload off is safe for options a plugin only reads now and then; core options such as siteurl, active_plugins and cron are protected.

## How to use it

Install the free WPIDE plugin (https://wordpress.org/plugins/wpide/), find "Autoloaded Options Inspector" in its snippet library and add it in one click; or create a new PHP snippet in WPIDE (or any code snippets plugin) and paste the code above. More snippets: https://wpide.com/library/
