Установка WP плагинов через composer

Click here to view original web page at wp-kama.ru

В этой статье поговорим, как устанавливать плагины через composer. Инструкция охватит плагины, которые находятся в репозитории WP и плагины, которые разрабатываются на github.com и добавлены в дефолтный каталог PHP пакетов https://packagist.org/.

Для плагинов из репозитория WP существует отдельный репозиторий https://wpackagist.org/ - это копия WP каталога плагинов специально созданная, чтобы плагин из каталога удобно можно было добавлять через композер (не путайте его с packagist.org).

Заметка: Все описание ниже подразумевает, что сам composer у вас уже установлен.

Читайте также:

Установка из wpackagist.org

Первое, что нужно сделать - это создать файл composer.json. Обычно его создают в корневой папке проекта. Схему (возможные параметры) этого файла смотрим в документации.

Допустим, мы создали его с такими параметрами:

{
  "name": "My Project",
  "description": "One more project.",
  "license": "proprietary",
  "authors": [
	{
	  "name": "Author Name",
	  "email": "author_name@gmail.com"
	}
  ],
}

Так как wpackagist.org - это не packagist.org (дефолтный репозиторий), его нужно зарегистрировать в composer.json файле, чтобы composer знал, что есть еще один репозиторий, где можно искать пакеты для установки:

{
  "name": "My Project",
  "description": "One more project.",
  "license": "proprietary",
  "authors": [
	{
	  "name": "Author Name",
	  "email": "author_name@gmail.com"
	}
  ],
  "repositories": [
	{
	  "type": "composer",
	  "url": "https://wpackagist.org"
	},
  ]
}

Теперь в параметре require нужно добавить название плагина, который мы хотим установить. А также, указать параметр extra.installer-paths - путь до папки с плагинами WP, куда мы хотим, чтобы композер устанавливал плагины.

Например, давайте установим плагин redis-cache:

{
  "name": "My Project",
  "description": "One more project.",
  "license": "proprietary",
  "authors": [
	{
	  "name": "Author Name",
	  "email": "author_name@gmail.com"
	}
  ],
  "repositories": [
	{
	  "type": "composer",
	  "url": "https://wpackagist.org"
	}
  ],
  "require": {
	"wpackagist-plugin/redis-cache": "^2.4.4",
	"composer/installers": "*",
  },
  "extra": {
	"installer-paths": {
	  "path/to/wp-content/plugins/{$name}": [
		"type:wordpress-plugin"
	  ]
	}
  },
  "config": {
	"allow-plugins": {
	  "composer/installers": true
	}
  }
}

Все плагины из репозитория wpackagist.org имеют тип wordpress-plugin. В параметре installer-paths мы указываем, что все плагины с этим типом должны устанавливаться в указанную папку, а не в дефолтную папку композера vendor.

Также, мы устанавливаем пакет composer/installers, и в параметре config.allow-plugins разрешаем ему загружаться вместе с композером и расширять его функциональность.

Пакет composer/installers - это официальное пакет композера, которое позволяет указывать отличную от vendor директорию для установки пакетов. Однако, он позволяет изменять каталог установки, только для ограниченных типов пакетов, для WordPress это:

  • wordpress-plugin
  • wordpress-theme
  • wordpress-muplugin
  • wordpress-dropin

Все! Теперь, чтобы установить плагин, нам нужно запустить команду:

$ composer install

Нюанс с версиями плагинов из wpackagist.org.

wpackagist.org копирует репозиторий плагинов WP (https://plugins.svn.wordpress.org/) и не заботится о сохранении прежних версий. Поэтому наличие или отсутствие определенной версии плагина, ложится на плечи разработчика. Разработчик должен поддерживать так называемые теги (SVN каталог tags). Т.е. при публикации каждой версии, разработчик должен позаботиться о том, чтобы в каталоге tags была создана (и оставалась в будущем) опубликованная версия плагина.

Чтобы лучше понять, что это значит, давайте рассмотрим на примере. Возьмем плагин wp-sitemap-page. Допустим, мы указали конкретную версию 1.6 (это была последняя версия на момент установки плагина):

"require": {
  "wpackagist-plugin/wp-sitemap-page": "1.6"
}

Прошло время и у плагина появилась новая версия 1.7. Теперь, если мы запустим composer install для среды, где в нужной папке нет файлов этого плагина (например при деплое на дев или прод сервер мы всегда заново устанавливаем все пакеты), то будет установлена версия 1.7, несмотря на то что в composer.json жестко прописано, что нам нужна версия 1.6.

Так происходит, потому что wpackagist.org просто копирует WP репозиторий и если мы заглянем в каталог tags (версий плагина) https://plugins.svn.wordpress.org/wp-sitemap-page/tags/, мы не найдем там нужную нам версию 1.6, а значит её просто неоткуда скачать и поэтому будет скачена последняя dev версия из каталога /trunk.

Это еще можно увидеть в файле composer.lock. УРЛ для скачивания не содержит никакой версии, а указывает на текущую версию из trunk каталога:

К счастью, подобных плагинов, по моим наблюдениям в WP репозитории все меньше. Особенно, если плагин популярный (хотя и тут бывают подобные косяки).

Установка из packagist.org

Тут все делается аналогично, с той лишь разницей, что нам не нужно указывать дополнительный репозиторий, и нужно, чтобы автор плагина добавил плагин в каталог https://packagist.org/

Например тот же плагин redis-cache можно установить таким конфигом в composer.json:

{
  "name": "My Project",
  "description": "One more project.",
  "license": "proprietary",
  "authors": [
	{
	  "name": "Author Name",
	  "email": "author_name@gmail.com"
	}
  ],
  "require": {
	"rhubarbgroup/redis-cache": "^2.4.4",
	"composer/installers": "*",
  },
  "extra": {
	"installer-paths": {
	  "path/to/wp-content/plugins/{$name}": [
		"type:wordpress-plugin"
	  ]
	}
  },
  "config": {
	"allow-plugins": {
	  "composer/installers": true
	}
  }
}

В такой установке минус - это то что непонятно, что пакет rhubarbgroup/redis-cache - это WP плагин, а не PHP пакет. Однако он лишен другого минуса, который описан выше (версионность работает надежнее).