Examples
Real-world usage patterns for WPZylos Requirements.
WooCommerce Extension
A plugin that requires WooCommerce with specific version:
<?php
// config/requirements.php
return [
'min_php_version' => '8.0',
'min_wp_version' => '6.0',
'php_extensions' => [
'json',
'curl',
],
'required_plugins' => [
'WooCommerce' => [
'plugin_slug' => 'woocommerce/woocommerce.php',
'min_plugin_version' => '8.0.0',
],
],
];
ACF-Based Plugin
A plugin that requires Advanced Custom Fields:
<?php
// config/requirements.php
return [
'min_php_version' => '8.1',
'min_wp_version' => '6.4',
'required_plugins' => [
'Advanced Custom Fields' => [
'plugin_slug' => 'advanced-custom-fields/acf.php',
],
// Or ACF Pro
'Advanced Custom Fields PRO' => [
'plugin_slug' => 'advanced-custom-fields-pro/acf.php',
'min_plugin_version' => '6.0.0',
],
],
];
API Integration Plugin
A plugin that makes HTTP requests and needs JSON/cURL:
<?php
// config/requirements.php
return [
'min_php_version' => '8.1',
'min_wp_version' => '6.0',
'php_extensions' => [
'json',
'curl',
'openssl',
'mbstring',
],
];
Single-Site Only Plugin
A plugin that should NOT run on WordPress Multisite:
<?php
// config/requirements.php
return [
'min_php_version' => '8.0',
'min_wp_version' => '6.0',
'is_multisite_compatible' => false,
];
Custom Requirement Example
A plugin that needs a minimum MySQL version:
<?php
// src/Requirements/MysqlVersionRequirement.php
namespace MyPlugin\Requirements;
use WPZylos\Framework\Requirements\Contracts\RequirementInterface;
class MysqlVersionRequirement implements RequirementInterface
{
private string $minVersion;
public function __construct(string $minVersion = '5.7')
{
$this->minVersion = $minVersion;
}
public function isSatisfied(): bool
{
global $wpdb;
$version = $wpdb->db_version();
return version_compare($version, $this->minVersion, '>=');
}
public function getErrorMessage(): string
{
global $wpdb;
return sprintf(
'MySQL %s+ is required. You are running: %s',
$this->minVersion,
$wpdb->db_version()
);
}
public function getName(): string
{
return 'mysql_version';
}
}
Usage:
// bootstrap/app.php
use MyPlugin\Requirements\MysqlVersionRequirement;
$app = Application::create($context);
$app->register(RequirementsServiceProvider::class);
// After service provider is registered, add custom requirement
$checker = $app->make('requirements.checker');
$checker->addRequirement(new MysqlVersionRequirement('8.0'));
Memory Limit Requirement
Check for minimum PHP memory limit:
<?php
// src/Requirements/MemoryLimitRequirement.php
namespace MyPlugin\Requirements;
use WPZylos\Framework\Requirements\Contracts\RequirementInterface;
class MemoryLimitRequirement implements RequirementInterface
{
private int $minBytes;
public function __construct(string $minMemory = '128M')
{
$this->minBytes = $this->parseBytes($minMemory);
}
public function isSatisfied(): bool
{
$limit = ini_get('memory_limit');
if ($limit === '-1') {
return true; // Unlimited
}
return $this->parseBytes($limit) >= $this->minBytes;
}
public function getErrorMessage(): string
{
return sprintf(
'Memory limit of %s is required. Current: %s',
$this->formatBytes($this->minBytes),
ini_get('memory_limit')
);
}
public function getName(): string
{
return 'memory_limit';
}
private function parseBytes(string $value): int
{
$value = trim($value);
$last = strtolower($value[strlen($value) - 1]);
$value = (int) $value;
switch ($last) {
case 'g': $value *= 1024;
case 'm': $value *= 1024;
case 'k': $value *= 1024;
}
return $value;
}
private function formatBytes(int $bytes): string
{
if ($bytes >= 1073741824) {
return round($bytes / 1073741824, 2) . 'G';
}
if ($bytes >= 1048576) {
return round($bytes / 1048576, 2) . 'M';
}
return round($bytes / 1024, 2) . 'K';
}
}
Early Exit Pattern
Stop plugin loading immediately if requirements fail:
<?php
// plugin.php
defined('ABSPATH') || exit;
// Quick requirements check before loading anything
require_once __DIR__ . '/vendor/autoload.php';
use WPZylos\Framework\Requirements\RequirementsConfig;
$checker = RequirementsConfig::fromFile(__DIR__ . '/config/requirements.php');
if ($checker->hasFailures()) {
add_action('admin_notices', function() use ($checker) {
echo '<div class="notice notice-error">';
echo '<p><strong>My Plugin cannot load:</strong></p><ul>';
foreach ($checker->getErrors() as $error) {
echo '<li>' . wp_kses_post($error) . '</li>';
}
echo '</ul></div>';
});
return; // Don't load plugin
}
// Requirements passed — load the plugin
require_once __DIR__ . '/bootstrap/app.php';