WP Manifestindependent plugin directory
manifest / developer / pi-info

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

0stars
0forks

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.zip

Readme

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_DEBUG state, 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.ini files
  • 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

  1. Upload the pi-info folder to /wp-content/plugins/, or install the plugin through the Plugins screen in WordPress.
  2. Activate the plugin through the Plugins screen.
  3. 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, because manage_options is 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 Referer header
  • 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 $_SERVER values 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, or unserialize
  • JavaScript is enqueued from a file rather than inlined, and touches textContent only

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-info text domain
  • Error logging now only writes when WP_DEBUG is 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_options on 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_version was 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.

Read the full README on GitHub →