Pi Info
A WordPress plugin that adds a single tabbed diagnostic page under Tools, showing core and plugin update status with per-plugin auto-update toggles, server and host details, and PHP version, limits, and loaded extensions.
by sm314 · github.com/swmpi/pi-info · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/swmpi/pi-info/archive/refs/heads/main.zipReadme
Pi Info
A single tabbed diagnostic page showing WordPress, server, and PHP details, with per-plugin automatic update toggles.
Pi Info adds one page to your admin area that gathers the details you would otherwise hunt for across several screens, an SSH session, and a phpinfo() dump. Three tabs, no configuration, and nothing written to the database except the automatic update settings you choose yourself.
| Requires WordPress | 5.5 or higher |
| Tested up to | 7.0 |
| Requires PHP | 7.0 or higher |
| Stable tag | 0.1.4 |
| License | GPLv2 or later |
Features
WordPress tab
- WordPress version and update status, read from the core update API
- Site URL, home URL, multisite status,
WP_DEBUGstate, file modification status, and active theme - Every installed plugin, with its file path, version, active or inactive status, and any pending update version
- A checkbox per plugin to enable or disable automatic updates, with a header checkbox to toggle all of them at once
- A Check Again button that forces a fresh update check against WordPress.org
Server tab
- Server IP address, hostname, operating system, kernel, and architecture
- Server software, protocol, port, document root, and SSL status
- The server's own date and time in its own timezone, shown next to UTC and the WordPress timezone, so clock mismatches are easy to spot
PHP tab
- PHP version, SAPI, integer size, and the loaded
php.inifiles - Memory limit, execution and input time limits, upload and post size limits, input vars, error display, and OPcache status
- Every loaded PHP extension with its version
Save Report
Every tab has a Save Report button that downloads what you are looking at as a plain text file, ready to paste into a support ticket. The report includes server paths and addresses, so review it before sharing publicly.
Privacy
Pi Info collects nothing, phones home to nowhere, and adds no tracking. The only outbound requests it makes are the update checks WordPress itself performs, and only when you press Check Again.
Installation
From the Plugins screen
- Upload the
pi-infofolder to/wp-content/plugins/, or install the plugin through the Plugins screen in WordPress. - Activate the plugin through the Plugins screen.
- Go to Tools → Pi Info.
Git
cd wp-content/plugins
git clone https://github.com/sm314/pi-info.git
File structure
pi-info/
├── pi-info.php Main plugin file, singleton bootstrap, constants, admin menu
├── pi-info-settings.php Tabbed page shell and shared render helpers
├── pi-info-wordpress.php WordPress tab, plugin list, auto-update form handling
├── pi-info-server.php Server tab
├── pi-info-php.php PHP tab
├── uninstall.php Removes the plugin's option on delete
├── readme.txt WordPress.org readme
├── css/
│ └── pi-info.css Admin styles, loaded only on the Pi Info page
└── js/
└── pi-info.js Toggle-all checkbox and the Save Report download
Frequently asked questions
Where is the page?
Tools → Pi Info, alongside Site Health. To move it under Settings instead, swap add_management_page() for add_options_page() in pi-info.php and change tools.php to options-general.php in pi_info_page_url().
Does the plugin change anything on my site?
Only the automatic update settings, and only when you save them. Everything else on the page is read only.
Do the automatic update settings match the ones on the Plugins screen?
Yes. Pi Info reads and writes the same auto_update_plugins option that WordPress core uses, rather than keeping a separate list, so the two screens always agree.
Why are the automatic update checkboxes greyed out?
Because WordPress will not allow the change. This is usually one of the following: DISALLOW_FILE_MODS is defined and true, AUTOMATIC_UPDATER_DISABLED is defined and true, plugin auto-updates are filtered off, or your account lacks the update_plugins capability. On multisite, only network administrators hold that capability.
I run multisite and cannot see the page on my subsite
That is intentional. The Server and PHP tabs expose host level detail that belongs to whoever owns the network, and on multisite manage_options is held by every subsite administrator. Pi Info requires manage_network_options when multisite is active, so the page is visible to network administrators only.
Some fields say Not available
Your host has placed the underlying function in disable_functions, which is common on hardened and shared hosting. Pi Info checks before calling anything that is routinely disabled, so those fields go blank instead of taking the page down.
Does it work with a strict Content Security Policy?
Yes. The only JavaScript is a single enqueued file, with nothing inline.
Notes
Constants
| Constant | Description |
|---|---|
PI_INFO_VERSION |
Current plugin version, derived from Pi_Info::VERSION |
PI_INFO_FILE |
Absolute path to the main plugin file |
PI_INFO_PATH |
Plugin directory path |
PI_INFO_URL |
Plugin directory URL |
PI_INFO_BASENAME |
Plugin basename |
PI_INFO_SLUG |
Admin page slug (pi-info) |
Options
| Option | Notes |
|---|---|
pi_info_version |
Added on activation, removed by uninstall.php on delete |
auto_update_plugins |
Core option, shared with the Plugins screen. Never removed by this plugin |
Security
- The page checks the required capability before rendering anything. On multisite this is
manage_network_options, becausemanage_optionsis held by every subsite administrator and this page exposes host level detail - Both write actions are POST only and nonce protected, so no nonce ends up in a URL where it could leak through the
Refererheader - The capability check runs before any request parsing, and the handler exits early on AJAX requests
- Form submissions use post-redirect-get, so refreshing the page will not resubmit
- All output is escaped, and
$_SERVERvalues are unslashed and sanitised before display - Submitted auto-update values are validated against the installed plugin list before being saved
- No database queries, dynamic includes, or use of
eval,exec, orunserialize - JavaScript is enqueued from a file rather than inlined, and touches
textContentonly
Changelog
0.1.4
- Added
uninstall.php, so the plugin's option is removed on delete rather than on deactivation - Added full internationalization, with the
pi-infotext domain - Error logging now only writes when
WP_DEBUGis enabled - Added a Save Report button that downloads the current tab as a text file
- Raised the minimum WordPress version to 5.5, which is when plugin automatic updates were introduced
- Moved inline styles into an enqueued stylesheet
- Fixed a typo in the licence header
0.0.2
- Require
manage_network_optionson multisite, so subsite administrators cannot read host level detail - Capability check moved ahead of request parsing, with an early exit on AJAX requests
- Update check converted from a nonced GET link to a POST button, so no nonce appears in a URL
- Toggle all script moved out of the page and into an enqueued file, for Content Security Policy compatibility
- Guarded calls to functions that hosts commonly place in
disable_functions - Fixed OPcache status reporting Yes when
ini_get()was unavailable - Fixed activation hooks never firing, which meant
pi_info_versionwas never written
0.0.1
- Initial release
- WordPress, Server, and PHP tabs
- Per-plugin automatic update toggles
License
GPL v2 or later — see https://www.gnu.org/licenses/gpl-2.0.html
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.