Установка WordPress через Composer

Хранить файлы ядра WordPress в репозитории проекта можно, но у вас могут возникнуть определенные трудности при таком флоу:

  • сложный процесс обновления ядра WordPress.
  • сложности code review или его отсутствие из-за огромного количества ченжей при замене файлов ядра WP на новую версию.
  • использовать разные версии WordPress для монорепозитория.
    С этим нам тоже может помочь Composer, но данное решение выходит за рамки статьи.

Для решения этих проблем в экосистеме WordPress, нам поможет Composer.

Composer — это инструмент для управления зависимостями в проектах на PHP. Он позволяет управлять библиотеками и расширениями, необходимыми для работы вашего проекта, и автоматически загружает их из удаленных репозиториев (packagist.org).

Composer помогает упростить процесс установки, обновления и удаления зависимостей в PHP-проектах, а также обеспечивает правильное разрешение конфликтов между разными версиями библиотек.

Для использования Composer локально есть 2 варианта:

  • работать с Composer из-под готового Docker Container следуя инструкции из README.md
  • использовать официальную документацию с установкой бинарника Composer локально https://getcomposer.org/download/

Далее давайте поговорим о использовании Composer в экосистеме WordPress.

.wpj-jtoc.—jtoc-theme-basic-light.—jtoc-has-custom-styles {
—jtoc-numeration-suffix: «. «;
—jtoc-numeration-color: #adadad;
}

Установка WordPress через Composer

Для установки WordPress через Composer, нам вначале нужно создать файл composer.json в корне проекта с базовым содержимым:

{
    "name": "wp-yoda/composer-with-wordpress",
    "description": "Example of using Composer for installing WordPress core and plugins",
    "authors": [
        {
            "name": "Andrei Pisarevskii",
            "email": "renakdup@gmail.com"
        }
    ],
    "require": {}
}

Далее нам необходимо добавить директиву repositories в composer.json откуда Composer пакеты WordPress будут подтягиваться

   "repositories": [
        {
            "type": "package",
            "package": {
                "name": "wordpress/wordpress",
                "version": "6.2.2",
                "type": "wordpress-core",
                "dist": {
                    "type": "zip",
                    "url": "https://github.com/WordPress/WordPress/archive/refs/tags/6.2.2.zip"
                }
            }
        }
    ],

Composer будет смотреть в эту директиву и просматривать все репозитории, чтобы найти нужный package. Подробнее по ссылке .

После того как мы добавили источник откуда будет скачиваться WordPress (официальный репозиторий), я предлагаю добавить WordPress как Composer зависимость.
Выполним следующую команду в консоле:

composer require wordpress/wordpress

После того как мы добавили пакет в composer.json, произошла и установка пакетов, вы должны увидеть у себя следующую структуру:

Не забудьте добавить /vendor/ в .gitignore файл, чтобы файлы Composer не индексировались.

Но вот незадача, Composer установил WordPress в vendor директорию.
Как его вытащить наружу?

Воспользуемся для этого Composer scripts events

События Composer scripts

Composer scripts events — это события Composer, которые запускают кастомные команды до, после выполнения Composer команды.
Простыми словами: мы можем повесить выполнение команды после или до того как выполнится composer install . Подробнее вы можете почитать по ссылке.

Вначале рассмотрим классический вариант установки WordPress в проект.

Классический вариант установки WordPress

Классический вариант — это вариант когда мы располагаем все файлы ядра WordPress в корне проекта, вместе с кастомными файлами.
У этого варианта есть свои преимущества и недостатки.

Преимущества:

  • Все плагины совместимы с этой структурой проекта

Недостатки:

  • Файлы ядра могут мешать при работе с проектом, т.к. они совмещены с вашими кастомными файлами.

Чтобы использовать этот вариант, необходимо добавить директиву scripts с событием post-install-cmd , которое срабатывает после install .

    "scripts": {
        "post-install-cmd": "cp -r ./vendor/wordpress/wordpress/* ./"
    }

в скрипте "post-install-cmd" мы копируем содержимое установленного WordPress в vendor директорию в наш рабочий каталог ./

Для того чтобы файлы ядра не попали в git index, необходимо добавить следующие правила в .gitignore

# ignore WordPress files
/index.php
/license.txt
/readme.html
/wp-activate.php
/wp-blog-header.php
/wp-comments-post.php
/wp-config-sample.php
/wp-config.php
/wp-cron.php
/wp-links-opml.php
/wp-load.php
/wp-login.php
/wp-mail.php
/wp-settings.php
/wp-signup.php
/wp-trackback.php
/xmlrpc.php

/wp-includes
/wp-admin

!/wp-content
/wp-content/*

/wp-content/mu-plugins/
!/wp-content/mu-plugins/

!/wp-content/plugins/
/wp-content/plugins/*
!/wp-content/plugins/CustomPluginName

!/wp-content/themes/
/wp-content/themes/*
!public/wp-content/themes/CutsomTheme

Теперь файлы ядра индексироваться не будут.

Для того чтобы добавить в индекс git новый плагин или тему, вам нужно добавить в конец файла .gitignore строки по примеру:

!/wp-content/plugins/CustomPluginName
!public/wp-content/themes/CutsomTheme

Где CustomPluginName или CustomTheme имя директории вашего плагина.

Исходный код этого варианта доступен по ссылке на :
https://github.com/renakdup/composer-with-wordpress/tree/Classic-variant-installation

Исходный код

Полный код проекта доступен в репозитории по ссылке.

Подытожим

Это первая статья из серии двух статей Использование Composer в WordPress.
Вторая статья про установку плагинов через WordPress повится чуть позже.

Теперь вы познакомились с тем как устанавливать WordPress через Composer.
Рассмотрели классический вариант установки WordPress в ваш проект.
Не стейсняйтесь рассказывать своим коллегам об этом подходе и применять на проектах.

Источник: WP-Yoda.com

Андрей Писаревский

Андрей Писаревский — Backend Team Lead в EPAM. Имею коммерческий опыт в программировании с 2010 года и экспертизу в полном цикле веб разработки: frontend, backend, QA, а так же server administration. Использую в работе: PHP, WordPress, Slim Framework, Linux, Docker, Agile.

%d такие блоггеры, как: