WP Manifestindependent plugin directory
manifest / seo / mu-plugins

MU Loader

Набор обязательных (must-use) плагинов для проектов на WordPress.

by Олег Дядьков · github.com/dyadkov-wp/mu-plugins

★ 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/dyadkov-wp/mu-plugins/archive/refs/heads/main.zip

WordPress mu-plugins

Набор обязательных (must-use) плагинов для новостного сайта на WordPress с темой Newspaper.

Все плагины загружаются автоматически и не могут быть отключены через админку.

Что в репозитории

Плагин Назначение
tagdiv-seo-fix Корректная микроразметка (Schema.org NewsArticle, Open Graph, Twitter Cards). Отключает встроенную схему темы Newspaper.

Список пополняется. Каждый плагин — отдельная папка со своим README.md и CHANGELOG.md.

Структура репозитория

mu-plugins/
├── .editorconfig              # настройки редактора (табы в PHP, пробелы в JSON/MD)
├── .gitattributes             # нормализация переносов строк (LF)
├── .gitignore                 # игнорируем vendor/, кэши, IDE
├── LICENSE                    # MIT на весь репозиторий
├── README.md                  # этот файл
├── composer.json              # dev-зависимости и скрипты
├── composer.lock              # зафиксированные версии (коммитим)
├── loader.php                 # загрузчик плагинов из подпапок
├── phpcs.xml                  # конфиг PHP_CodeSniffer (WordPress-стандарт)
├── phpstan.neon               # конфиг PHPStan
├── vendor/                    # dev-зависимости (в .gitignore)
└── tagdiv-seo-fix/
    ├── tagdiv-seo-fix.php     # основной файл плагина
    ├── README.md              # описание плагина
    ├── CHANGELOG.md           # история изменений
    └── LICENSE                # MIT (для копирования папки в другой проект)

Почему используется loader.php

WordPress не загружает .php-файлы из подпапок mu-plugins автоматически. Он видит только файлы, лежащие непосредственно в корне mu-plugins/.

loader.php решает эту проблему: он находится в корне, WordPress его подхватывает, а уже сам загрузчик подключает остальные плагины из подпапок через require_once.

Это даёт:

  • Чистый корень mu-plugins/ — только один файл loader.php.
  • Каждый плагин в отдельной папке — удобно версионировать через Git.
  • Возможность подключать/отключать плагины простым редактированием массива в loader.php.
  • Отдельные README.md для каждого плагина прямо в его папке.

Как добавить новый плагин

  1. Создайте папку tagdiv-seo-fix/ (или <plugin-name>/).

  2. Поместите в неё файл <plugin-name>.php с заголовком плагина.

  3. Добавьте путь к файлу в массив $sitename_mu_plugins внутри loader.php:

     $dyseo_mu_plugins = array(
         'tagdiv-seo-fix/tagdiv-seo-fix.php',
         'another-plugin/another-plugin.php',
     );
  4. Создайте README.md и CHANGELOG.md в папке плагина.

  5. Закоммитьте изменения. На сервере достаточно git pull — плагин подхватится автоматически.

Как обновлять плагины

Поскольку это mu-plugins, обновление идёт только через Git, а не через админку WordPress:

  • Локально: правки → коммит → push.
  • На сервере: git pull в директории wp-content/mu-plugins/.
  • Либо через CI (GitHub Actions + rsync/SSH) по тегу версии.

Откатить изменение можно через git revert или git checkout <tag> — без риска «сломать» сайт через админку.

Соглашения по именованию

  • Папка плагина: kebab-case, совпадает с именем основного файла.
  • Основной файл: <plugin-name>.php.
  • Префикс констант: DYSEO_.
  • Префикс функций и классов: аналогично префиксу констант.
  • Все хуки, фильтры и опции — с тем же префиксом, чтобы не конфликтовать с другими плагинами.
  • Глобальные переменные в loader.php — с префиксом $dyseo_.

Разработка

Требования

  • WordPress 5.0+.
  • PHP 7.4+ (рекомендуется 8.1+).
  • Composer 2.x.
  • Git на сервере или настроенный CI для деплоя.

Установка зависимостей

Из-за блокировки packagist.org в РФ composer install может упасть в таймаут. Используйте зеркало:

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
composer install

Зеркало настраивается один раз на машине. В composer.json его прописывать не нужно.

Проверки

composer lint         # PHPCS по WordPress-стандарту (прогресс + источники ошибок)
composer lint:summary # таблица с файлами и числом ошибок
composer lint:fix     # автоисправление через PHPCBF
composer analyse      # PHPStan, уровень 5, лимит памяти 1G
composer check        # lint + analyse подряд

Все три инструмента настраиваются файлами phpcs.xml, phpstan.neon и composer.json.

Переносы строк

.gitattributes заставляет Git хранить все текстовые файлы с Unix-переносами (\n), даже если редактор сохраняет с \r\n. Это требование WordPress-стандарта и защита от проблем при деплое на Linux-сервер.

.editorconfig подсказывает редакторам правильный стиль: табы для .php, пробелы для .md, .json, .xml, .neon.

Если PHPCS ругается на End of line character is invalid — проверьте настройки редактора. В VS Code: правый нижний угол → CRLF → переключить на LF.

Лицензия

MIT. См. файл LICENSE в корне репозитория.

Код можно свободно использовать, изменять и распространять при условии сохранения текста лицензии и указания авторства. Авторы не несут ответственности за возможный ущерб от использования.