В коде куча относительных require_once('includes/...') без __DIR__. Когда PHP ищет файл, он смотрит относительно текущей рабочей директории (обычно корень сайта), а не относительно файла плагина. В итоге:
Failed opening required 'includes/d_config.php'Call to undefined function d_is_wp_login_page()/d_regex_replace()/Class "d_config" not found- или ошибка в drop-in
db.php(он тоже опирается на функции, которые ещё не загружены)
Плюс кэш может отдавать битые/старые страницы, а в конфиге включены CACHE, CACHE_DB, CACHE_INDEX и т.д.
1. Быстрое восстановление сайта (сделай прямо сейчас)
Через FTP / файловый менеджер хостинга / SSH:
- Переименуй папку плагина
wp-content/plugins/d→wp-content/plugins/d_off
(или просто удали временно). - Отредактируй
wp-config.php(в корне сайта)
Найди и удали строку вида:
include('wp-content/plugins/d/d_ic.php');
или
require(...d_ic.php...);
(ищи по d_ic или plugins/d).
- Отредактируй
index.php(в корне сайта)
Удали строку:
include('wp-content/plugins/d/d_ii.php');
- Удали/переименуй drop-in:
wp-content/db.php→db.php.off(или удали)
- (по желанию) очисти кэш плагина: удали всё содержимое
wp-content/plugins/d_off/cache/(или оставь — не критично).
После этих действий сайт должен подняться без плагина.
2. Если хочешь оставить плагин — исправь пути
Относительные require нужно заменить на __DIR__. Вот правильные варианты ключевых файлов:
d/d_ic.php (то, что вставляется в wp-config.php):
<?php
define('D_IC', true);
require_once(__DIR__ . '/includes/d_config.php');
if (DISABLE_CRON) define('DISABLE_WP_CRON', true);
if (DISABLE_REVISIONS) define('WP_POST_REVISIONS', false);
if (DISABLE_TRASH) define('EMPTY_TRASH_DAYS', 0);
if (DISABLE_AUTOUPDATE) {
define('AUTOMATIC_UPDATER_DISABLED', true);
define('WP_AUTO_UPDATE_CORE', false);
}
d/d_ii.php (то, что вставляется в index.php):
<?php
define('D_II', true);
require_once(__DIR__ . '/includes/d_config.php');
require_once(__DIR__ . '/includes/d_cache.php');
require_once(__DIR__ . '/includes/d_remote.php');
if (D_GLOBAL_IGNORE) {
$current_url = d_current_url();
foreach (explode("\n", d_d(D_GLOBAL_IGNORE_URLS)) as $url) {
if (preg_match('#'.str_replace('\*', '.*', preg_quote($url)).'\|#i', $current_url.'|')) return;
}
}
if (D_PRE_PHP && D_PRE_PHP_CODE != '') {
eval(d_d(str_replace(array('<?php', '<?PHP', '<?', '?>'), '', D_PRE_PHP_CODE)));
}
if (D_REMOTE_CONTROL) d_remote::get()->call();
if (CACHE || CACHE_INDEX) d_cache::get()->load();
В d/d.php (начало конструктора):
require_once(__DIR__ . '/includes/d_config.php');
require_once(__DIR__ . '/includes/d_cache.php');
В d/includes/d_config.php (самая первая строка после <?php):
require_once(__DIR__ . '/d_helpers.php');
После правок:
- Переименуй папку обратно в
d - Заново активируй плагин в админке (он снова пропишет include’ы, но уже с правильными путями внутри)
- Или вручную верни строки include в
wp-config.phpиindex.php, если нужно.
3. Дополнительные рекомендации
- Временно отключи кэш в
d/d_config.php(или через админку плагина, если зайдёт):
define('CACHE', false);
define('CACHE_INDEX', false);
define('CACHE_DB', false);
Потом очисти папку cache/.
- Включи отладку на время:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Смотри wp-content/debug.log.
- Плагин очень старый по подходу (модифицирует ядровые файлы, подменяет
wpdb, отключает nonce и т.д.). На PHP 8.1–8.3 и свежих версиях WordPress он легко ломается. Если после починки путей снова будут ошибки — лучше искать более современную альтернативу (LiteSpeed Cache / WP Rocket / Redis Object Cache + нормальный SEO-плагин). - В кэше и на страницах сайта очень много мусорного AI-текста («Unfortunately, it seems like there is no text to rewrite…», «Here is the rewritten text…» и т.п.). Это не причина фатала, но сильно портит сайт. Лучше переписать/почистить контент.
Если после удаления include’ов и папки плагина сайт всё равно падает — пришли точный текст ошибки из debug.log или из браузера (белый экран + сообщение), и разберём дальше.

