using composer to create manageable wordpress websites

37
Using Composer to create manageable WordPress websites Anna Ladoshkina WordCamp Europe, 24/06/2016

Upload: anna-ladoshkina

Post on 13-Apr-2017

648 views

Category:

Internet


0 download

TRANSCRIPT

Page 1: Using Composer to create manageable WordPress websites

Using Composer to create manageable WordPress websites

Anna LadoshkinaWordCamp Europe, 24/06/2016

Page 2: Using Composer to create manageable WordPress websites

I’ve been making websites for NGOs for 7 years

@foralien bureau / Teplitsa. Technologies for social good

Page 3: Using Composer to create manageable WordPress websites

You may need it if…

You are developing websites on PHP (with WordPress)

You would like to use modern development tool

You would like to have more organized projects

You would like to start easily

You hear that buzzword all the time, but…

Page 4: Using Composer to create manageable WordPress websites
Page 5: Using Composer to create manageable WordPress websites

What’s dependency?

Suppose:

You have a project that depends on a number of libraries. Some of those libraries depend on other libraries.

Composer:

Enables you to declare the libraries you depend on. Finds out versions of packages and installs them (into your project)

Page 6: Using Composer to create manageable WordPress websites
Page 7: Using Composer to create manageable WordPress websites

How to install?

PHP 5.3.x and command line

Follow instruction at https://getcomposer.org/doc/00-intro.md

Add composer.json to the project folder

Page 8: Using Composer to create manageable WordPress websites

Composer.json?

$ composer init

{ "name": "foralien/my_pack", "description": "Test package", "authors": [ { "name": "Anna Ladoshkina", "email": "[email protected]" } ], "require": {}}

Page 9: Using Composer to create manageable WordPress websites

Where to find packages?

Composer-specific repositories https://packagist.org/

GitHub (other open-source repositories) https://github.com/

Create yourself author/package_name

Page 10: Using Composer to create manageable WordPress websites

packagist.org

Page 11: Using Composer to create manageable WordPress websites

Add them one by one…

$ composer config repositories.foo vcs https://github.com/foo/bar

$ composer require package

More on command-line interface: https://getcomposer.org/doc/03-cli.md

Page 12: Using Composer to create manageable WordPress websites

…or specify them all in composer.json

"repositories": [ { "type": "composer", "url" : "http://some-packagist.org" }, { "type": "vcs", "url": "https://github.com/username/repo" }, { "type": "artifact", "url": "local_folder/" } ],"require" : { "author/package": "1.0", "another_author/package" : "4.4"}

More on composer.json schema: https://getcomposer.org/doc/04-schema.md

Page 13: Using Composer to create manageable WordPress websites

$ composer install

Page 14: Using Composer to create manageable WordPress websites

Have some coffee and check /vendor folder

Page 15: Using Composer to create manageable WordPress websites

Even for WordPress?

Page 16: Using Composer to create manageable WordPress websites

What’s the problem?

Page 17: Using Composer to create manageable WordPress websites

Common WordPress website project

- core files - wp-config.php - wp-content/plugins

- wp-content/themes

- wp-content/languages - wp-content/uploads

Page 18: Using Composer to create manageable WordPress websites

A few questions to ask

What should be under version control?

- What are dependencies? - Where are Composer-compatible repositories? - What to do with vendor folder?

Page 19: Using Composer to create manageable WordPress websites

Give me an example

https://roots.io/ Bedrock - WordPress boilerplate

http://composer.rarst.net Unofficial companion to Composer documentation for WordPress developers

Page 20: Using Composer to create manageable WordPress websites

Step by step

Page 21: Using Composer to create manageable WordPress websites

Core is dependency

plugins languages

themes

What are dependencies?

Page 22: Using Composer to create manageable WordPress websites

Tune project structureWordPress in subfolder

https://codex.wordpress.org/Giving_WordPress_Its_Own_Directory

Move wp-content folder

https://codex.wordpress.org/Editing_wp-config.php#Moving_wp-content_folder

Page 23: Using Composer to create manageable WordPress websites

In settings

Page 24: Using Composer to create manageable WordPress websites

In wp-config.php

define( 'WP_CONTENT_DIR', dirname(__FILE__) . '/wp-content' );

define( 'WP_CONTENT_URL', '//domain.com/wp-content' );

Page 25: Using Composer to create manageable WordPress websites

WordPress specific repositories

core plugins

languages

Where are Composer-compatible repositories?

Page 26: Using Composer to create manageable WordPress websites

WordPress core at https://packagist.org/

Page 27: Using Composer to create manageable WordPress websites

Plugins at wpackagist.org

Page 28: Using Composer to create manageable WordPress websites

Language-packs at wp-languages.github.io

Page 29: Using Composer to create manageable WordPress websites

Local folder /artifacts

myproject/myplugin-2.0.zip

— plugins code — composer.json

Page 30: Using Composer to create manageable WordPress websites

Add them into composer.json

"repositories": [ { "type": "composer", "url" : "http://wpackagist.org" }, { "type": "composer", "url": "http://wp-languages.github.io" },]

Page 31: Using Composer to create manageable WordPress websites

Config custom paths for dependencies

core plugins

languages

What to do with vendor folder?

Page 32: Using Composer to create manageable WordPress websites

Paths in composer.json

"config" : { "vendor-dir": "wp-content/vendor", },"extra" : { "wordpress-install-dir": "core", "dropin-paths": { "wp-content/languages/":

["vendor:koodimonni-language"] }}

Page 33: Using Composer to create manageable WordPress websites

Finally add dependencies into…

Page 34: Using Composer to create manageable WordPress websites

…require or requires-dev sections

"require" : { "composer/installers" : "~1.0", "johnpbloch/wordpress" : ">=4.4", "wpackagist-plugin/wordpress-seo" : "@stable", "koodimonni-language/core-ru_ru" : "*" , "myproject/myplugin" : "2.0",},"require-dev" : { "wpackagist-plugin/menu-exporter" : "@stable", "wpackagist-plugin/wordpress-importer" : "@stable" }

Page 35: Using Composer to create manageable WordPress websites

$ composer install

Page 36: Using Composer to create manageable WordPress websites

composer.lock$ composer update

Page 37: Using Composer to create manageable WordPress websites

@foralien bureau / foralien.comThank you

Anna Ladoshkina

www.facebook.com/[email protected]