'; echo esc_html__('A legacy Aetos SEO Pro replacement build is active, so this WordPress.org edition is standing down to avoid duplicate Aetos admin screens. Your settings and audit history remain available.', 'aetos-seo'); echo '
'; }); } unset($aetos_self_basename, $aetos_sibling); return; } unset($aetos_sibling); } unset($aetos_self_basename); // Constants. if (!defined('AETOS_SEO_VERSION')) { define('AETOS_SEO_VERSION', '4.0.18'); } // Edition gate. The build sets this constant for each edition; the audit // engine reads it to scope itself to the matching feature set. if (!defined('AETOS_EDITION')) { define('AETOS_EDITION', 'lite'); } // DB schema version (used for automatic upgrades via Activator::maybe_upgrade()). // v3.3.40 — bumped so the one-time crawl_max_urls 1000→200 settings migration // in Activator::maybe_upgrade() fires once for every customer on upgrade. if (!defined('AETOS_SEO_DB_VERSION')) { define('AETOS_SEO_DB_VERSION', '2026-05-18-1'); } if (!defined('AETOS_SEO_SLUG')) { $aetos_seo_init_base = plugin_basename(__FILE__); $aetos_seo_init_slug = dirname($aetos_seo_init_base); if (!is_string($aetos_seo_init_slug) || $aetos_seo_init_slug === '' || $aetos_seo_init_slug === '.') { $aetos_seo_init_slug = 'aetos-seo'; } define('AETOS_SEO_SLUG', $aetos_seo_init_slug); unset($aetos_seo_init_base, $aetos_seo_init_slug); } // The plugin's own active_plugins entry ("folder/main-file.php"), captured from // the real loading file. Each edition ships its own folder/main-file path, so // anything that needs to // recognise "our own row" must read THIS, never a hardcoded slug — see // Activator::normalize_active_plugin_entries() (the old hardcoded canonical // silently self-deactivated any install whose path merely contained "aetos-seo"). if (!defined('AETOS_SEO_BASENAME')) { define('AETOS_SEO_BASENAME', str_replace('\\', '/', plugin_basename(__FILE__))); } if (!defined('AETOS_SEO_PATH')) { define('AETOS_SEO_PATH', plugin_dir_path(__FILE__)); } if (!defined('AETOS_SEO_URL')) { define('AETOS_SEO_URL', plugin_dir_url(__FILE__)); } // Aetos SEO product identity. Public product surfaces use the Aetos brand; // legal publisher details remain on the website's legal pages. if (!defined('AETOS_SEO_BRAND_NAME')) { define('AETOS_SEO_BRAND_NAME', 'Aetos SEO'); } if (!defined('AETOS_SEO_BRAND_NAME_AR')) { // Brand-mark stays in Latin script even in Arabic UI (industry-standard // for global SaaS). The Arabic publisher line below reads "نسر المتاجر". define('AETOS_SEO_BRAND_NAME_AR', 'Aetos SEO'); } if (!defined('AETOS_SEO_BRAND_TAGLINE')) { define('AETOS_SEO_BRAND_TAGLINE', 'SEO & AI Auditor for WordPress'); } if (!defined('AETOS_SEO_BRAND_TAGLINE_AR')) { define('AETOS_SEO_BRAND_TAGLINE_AR', 'فحص SEO و AI لمواقع ووردبريس'); } if (!defined('AETOS_SEO_PUBLISHER')) { define('AETOS_SEO_PUBLISHER', 'Aetos SEO'); } if (!defined('AETOS_SEO_PUBLISHER_AR')) { define('AETOS_SEO_PUBLISHER_AR', 'Aetos SEO'); } if (!defined('AETOS_SEO_BRAND_URL')) { define('AETOS_SEO_BRAND_URL', 'https://aetosseo.com'); } if (!defined('AETOS_SEO_BRAND_EMAIL')) { define('AETOS_SEO_BRAND_EMAIL', 'support@aetosseo.com'); } if (!defined('AETOS_SEO_BRAND_WHATSAPP')) { define('AETOS_SEO_BRAND_WHATSAPP', '+201068187346'); } if (!defined('AETOS_SEO_BRAND_PRIMARY')) { define('AETOS_SEO_BRAND_PRIMARY', '#162534'); } if (!defined('AETOS_SEO_BRAND_ACCENT')) { define('AETOS_SEO_BRAND_ACCENT', '#32A832'); } $aetos_seo_base_path = plugin_dir_path(__FILE__); /** * Locate a plugin file with safe fallbacks. * Handles rare broken extraction cases where backslashes are stored * as literal characters in file names. */ if (!function_exists('aetos_seo_locate_file')) { function aetos_seo_locate_file(string $relative): string { $base = plugin_dir_path(__FILE__); $rel = ltrim($relative, '\\/'); $rel_slash = str_replace('\\', '/', $rel); $rel_back = str_replace('/', '\\', $rel_slash); $candidates = [ $base . $rel_slash, $base . $rel_back, $base . 'aetos-seo/' . $rel_slash, $base . 'aetos-seo\\' . $rel_back, ]; foreach ($candidates as $file) { if (is_string($file) && $file !== '' && is_readable($file)) { return $file; } } return ''; } } if (!function_exists('aetos_seo_plugins_root')) { function aetos_seo_plugins_root(): string { // active_plugins basenames resolve relative to the plugins directory, so it is // the canonical plugins root even on custom wp-content layouts. The // fallback is the direct parent of THIS plugin's folder — never a // fixed-level walk that assumes the default directory structure. return dirname(rtrim((string) plugin_dir_path(__FILE__), '/\\')); } } if (!function_exists('aetos_seo_site_root_path')) { function aetos_seo_site_root_path(): string { // Prefer WordPress' public home-path helper when it is already loaded. if (function_exists('get_home_path')) { $home_path = (string) get_home_path(); if ($home_path !== '' && $home_path !== '/' && is_dir($home_path)) { return rtrim($home_path, '/\\'); } } return ''; } } if (!function_exists('aetos_seo_plugin_headers')) { /** * @return array'; echo esc_html__('Aetos SEO bootstrap failed: Core plugin class is missing. Please re-upload the canonical Aetos SEO ZIP and ensure only one plugin folder exists.', 'aetos-seo'); echo '
Aetos SEO Recovery: '; echo esc_html($ui_msg); echo '
' . esc_html__('Plugin boot failed. Use the details below to fix deployment quickly.', 'aetos-seo') . '
'; echo '' . esc_html($ui_msg) . ''; echo '