Использование Composer в WordPress: небольшое руководство для новичков

Composer – это менеджер зависимостей для PHP. Если вы вели какую-либо современную PHP-разработку в последние несколько лет, вы, скорее всего, использовали Composer. Packagist – репозиторий для Composer, то место, где Composer будет искать устанавливаемые пакеты (библиотеки).

wordpress-and-composer

В этой статье мы объясним, почему вы должны использовать менеджер зависимостей, а также покажем, как интегрировать Composer к своему WordPress-сайту.

Почему стоит использовать менеджер зависимостей в WordPress

Повторное использование кода – хорошая вещь. Ваши клиенты не будут платить вам за повторное изобретение колеса, они платят за то, чтобы вы создали для них сайт или приложение. Возможно, вы уже знаете это, и потому у вас имеется набор плагинов, которые вы используете на всех создаваемых вами сайтах WordPress. Вы уже используете код других людей, оформленный в виде плагинов, однако есть также огромный мир современных PHP библиотек, доступных вам через Composer.

Некоторые разработчики сделали плагины доступными в виде зависимостей для Composer.

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

Если вы – один из тех, кому нравится взламывать плагины и переписывать их так, чтобы они делали необходимые вам вещи (после чего ваши изменения будут убиты очередным обновлением плагина), менеджер зависимостей позволит поменять ваш ход мыслей, заставит вас по-другому добиваться поставленных целей.

Начинаем работу с Composer

Если вы уже работали с Composer, вы знаете, что для начала вам нужно поместить WordPress в подпапку. Возможно, вы используете подмодуль, как предлагает Марк Джекит.

Отлично! В таком случае давайте превратим этот подмодуль WordPress в зависимость Composer.

Но для начала вам нужно будет удалить подмодуль. Мы не будем рассказывать про это в данной статье.

Краткое введение в инсталляторы Composer

Composer устанавливает библиотеки в каталог vendor в корне вашего проекта. Каждый пакет по умолчанию располагается в vendor/{vendorName}/{libraryName}. Инсталлятор позволяет вам менять это поведение на основе типа пакета. Поскольку WordPress не является библиотекой (это скорее приложение со статичными ресурсами), нам нужно установить его в отдельную папку в пределах директории корня документа.

К счастью, нам не надо создавать инсталлятор WordPress самостоятельно, поскольку он уже существует.

Установка WordPress

Определить зависимости Composer вы можете в файле composer.json, который находится в корне вашего проекта. Существует автоматически обновляемый форк WordPress, который включает в себя файл composer.json.

Чистый файл Composer включает в качестве зависимостей инсталлятор WordPress, а также саму систему WordPress. Также имеется раздел extra, в котором вы сообщаете инсталлятору WordPress, куда поместить WordPress.

{
    "name": "pmg/composer-wp-example",
    "description": "Getting start with WordPress and Composer",
    "license": "MIT",
    "require": {
        "php": ">=5.5",
        "johnpbloch/wordpress-core-installer": "0.2.0",
        "johnpbloch/wordpress": "~4.2"
    },
    "extra": {
        "wordpress-install-dir": "wp"
    }
}

Приведенный выше код установит WordPress в каталог wp. Если у вас уже установлен Composer, вы можете ввести composer install в командную строку.

Если вывести список файлов из нашей новой директории, то мы увидим WordPress, новый каталог vendor, а также файл composer.lock:

wp-composer-example$ ls

composer.json

composer.lock

vendor

wp

Установка плагинов и произвольных репозиториев

Теперь, когда у нас установлена WordPress, давайте поставим некоторые плагины с помощью composer. Помните инсталлятор, приведенный выше? Так вот: существуют и другие, произвольные инсталляторы для плагинов и тем WordPress, которые являются частью библиотеки composer/installers. Давайте воспользуемся ими. Пути к файлам ниже предполагают, что вы задали для content папку wp-content.

Чтобы установить плагины в качестве зависимостей Composer с WP Packagist, нам нужно добавить их в виде репозиториев в наш файл composer.json. Наш новый файл будет иметь следующий вид:

{
    "name": "pmg/composer-wp-example",
    "description": "Getting start with WordPress and Composer",
    "license": "MIT",
    "repositories": [
        {
            "type":"composer",
            "url":"http://wpackagist.org"
        }
    ],
    "require": {
        "php": ">=5.5",
        "johnpbloch/wordpress-core-installer": "0.2.0",
        "johnpbloch/wordpress": "~4.2",
        "composer/installers": "~1.0"
    },
    "extra": {
        "wordpress-install-dir": "wp",
        "installer-paths": {
            "content/plugins/{$name}": ["type:wordpress-plugin"],
            "content/themes/{$name}": ["type:wordpress-theme"],
            "content/mu-plugins/{$name}": ["type:wordpress-muplugin"]
        }
    }
}

Давайте установим в качестве зависимости WordPress SEO:

{
    "name": "pmg/composer-wp-example",
    "description": "Getting start with WordPress and Composer",
    "license": "MIT",
    "repositories": [
        {
            "type":"composer",
            "url":"http://wpackagist.org"
        }
    ],
    "require": {
        "php": ">=5.5",
        "johnpbloch/wordpress-core-installer": "0.2.0",
        "johnpbloch/wordpress": "~4.2",
        "composer/installers": "~1.0",
        "wpackagist-plugin/wordpress-seo": "~2.1"
    },
    "extra": {
        "wordpress-install-dir": "wp",
        "installer-paths": {
            "content/plugins/{$name}": ["type:wordpress-plugin"],
            "content/themes/{$name}": ["type:wordpress-theme"],
            "content/mu-plugins/{$name}": ["type:wordpress-muplugin"]
        }
    }
}

После запуска composer update из командной строки у нас будет директория content, которая будет содержать наш недавно установленный плагин!

wp-composer-example$ ls

composer.json

composer.lock

content

vendor

wp

wp-composer-example$ ls content/plugins/

wordpress-seo

Другие советы

В идеале вам нужно развернуть свой WordPress-сайт таким образом, чтобы папка vendor и ваши файлы composer.{lock,json} не были в корне документа и не были публично доступными. Блокировать эти файлы можно с помощью конфигурации сервера:

RewriteEngine on
RewriteRule ^composer\.(lock|json)$ - [F,L]
RewriteRule ^vendor/.*$ - [F,L]
server {
  host yoursite.com
  
  # ...
  
  location ~ ^/composer\.(json|lock) {
    return 401;
  }
  
  location /vendor {
    return 401;
  }
 }

Я написал небольшой WordPress Skeleton, чтобы вы могли начать работу с Composer.

Делаем первый шаг

Как только вы начнетесь пользоваться Composer, вам будет сложно отказаться от него. Дайте ему шанс – по крайней мере, вы можете попробовать поставить WordPress через Composer.

Источник: https://www.pmg.com

Блог про WordPress
Комментарии: 5
  1. Pavel

    Отличный пост! Не знал что у WP есть свой Packagist сайт. Надеюсь там есть самые популярные модули.

    1. Дмитрий (автор)

      да, там очень много плагинов и тем WordPress.

  2. Александр

    Добрый день!

    А с помощью какого инструмента потом собирать папки «wp» и «content» в единый каталог для отправки на удаленный сервер? Или это не требуется?

    1. Pavel

      Если знать точную структуру каталогов сервера, это можно сделать с помощью Ant

  3. Михаил

    Вместо номеров версий лучше оставить «*»
    {
    «name»: «pmg/composer-wp-example»,
    «description»: «Getting start with WordPress and Composer»,
    «license»: «MIT»,
    «require»: {
    «php»: «>=5.5»,
    «johnpbloch/wordpress-core-installer»: «*»,
    «johnpbloch/wordpress»: «*»
    },
    «extra»: {
    «wordpress-install-dir»: «wp»
    }
    }

Добавить комментарий

Получать новые комментарии по электронной почте.