LLM analysis of WordPress plugins and themes
Published July 22nd, 2024 under General
When debugging or improving WordPress/PHP scripts, I often run the PHP code through ChatGPT, Gemini, Claude, or other LLMs (Large Language Models) for analysis. Here’s a simple PHP script to list and display .php, composer.json, and package.json files, which you can copy/paste directly into your LLM of choice. This saves you from manually loading each file and copying/pasting it over.
The PHP script:
<?php
declare(strict_types=1);
error_reporting(E_ALL);
ini_set('display_errors', 1);
$subDirectory = isset($_GET['dir']) ? $_GET['dir'] : '';
$directory = __DIR__ . '/' . $subDirectory;
// Function to list sub-directories
function listDirectories($directory) {
$directories = [];
foreach (new DirectoryIterator($directory) as $dir) {
if ($dir->isDir() && !$dir->isDot()) {
$directories[] = $dir->getFilename();
}
}
return $directories;
}
// Check if directory is valid
if (!is_dir($directory)) {
die("Invalid directory specified.");
}
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
$filesToDisplay = [];
foreach ($iterator as $file) {
if ($file->isFile() && (strtolower($file->getExtension()) === 'php' || in_array($file->getFilename(), ['composer.json', 'package.json']))) {
$filesToDisplay[] = $file->getPathname();
}
}
// Page styling
echo "<style>
body {
font-family: 'Arial', sans-serif;
background-color: #f2f2f2;
color: #333;
margin: 0;
padding: 20px;
}
form {
margin-bottom: 20px;
}
label {
font-weight: bold;
}
select {
padding: 5px;
margin-right: 10px;
}
input[type='submit'] {
padding: 5px 10px;
background-color: #007bff;
color: white;
border: none;
border-radius: 3px;
cursor: pointer;
}
input[type='submit']:hover {
background-color: #0056b3;
}
pre {
background-color: #f8f9fa;
border: 1px solid #dee2e6;
padding: 10px;
border-radius: 5px;
white-space: pre-wrap;
word-wrap: break-word;
}
</style>";
// Display directory selection form
if (empty($subDirectory)) {
echo "<form method='GET'>";
echo "<label for='dir'>Select a directory:</label>";
echo "<select name='dir' id='dir'>";
echo "<option value=''>--Select Directory--</option>";
foreach (listDirectories(__DIR__) as $dir) {
echo "<option value='$dir'>$dir</option>";
}
echo "</select>";
echo "<input type='submit' value='Go'>";
echo "</form>";
} else {
echo "<form method='GET'>";
echo "<label for='dir'>Select another directory:</label>";
echo "<select name='dir' id='dir'>";
echo "<option value=''>--Select Directory--</option>";
foreach (listDirectories(__DIR__) as $dir) {
echo "<option value='$dir'>$dir</option>";
}
echo "</select>";
echo "<input type='submit' value='Go'>";
echo "</form>";
// Display the list of files
echo "<pre>";
foreach ($filesToDisplay as $file) {
$path = str_replace($directory, '', $file);
if (
strpos($path, '/vendor/') !== 0
&& '/analyse.php' !== $path
) {
echo htmlspecialchars($path) . ':' . PHP_EOL;
echo '```' . htmlspecialchars(file_get_contents($file)) . '```';
echo PHP_EOL . PHP_EOL . PHP_EOL;
}
}
echo "</pre>";
}
Usage
Place this script in the wp-content/themes or wp-content/plugins directory of your WordPress installation. It is not a WordPress plugin, so you need to load the file directly.
How it works
- Directory Selection: Select a sub-directory to view its files.
- File Filtering: Lists PHP files, composer.json, and package.json files.
- Display: Outputs files in a styled <pre> tag for easy reading.
This script simplifies the process of accessing and analysing your WordPress files, making it easier to utilise LLMs for detailed insights and improvements.
Cole says:
I’ve been planning to publish a new wp plugin and hope this code helps testing it
November 24, 2024 at 7:21 pm # //