Composer în teme sau plugin-uri de WordPress

Composer în teme sau plugin-uri de WordPress

Am aflat cu surprindere că sunt oameni care nu mai sunt de mult timp la începutul carierei de WP dev, dar … care nu folosesc Composer.

Pe scurt, Composer e un manager de pachete, un ceva care te ajută să instalezi rapid diverse dependențe. Mai pe lung, este ceva mai mult de atât. Te poate ajuta să rulezi scripturi, să auto-încarci clase, să încarci fișiere șamd. Recomand o incursiune în documentație, este o adevărată aventură.

La ce folosesc eu Composer?

  • Instalarea dependențelor. În majoritatea proiectelor folosesc un wrapper pentru Handlebars (la care tot amân un refactor), Carbon Fields și extensiile mele pentru Carbon Fields.
  • Încărcarea fișierelor. În loc să fac require 'inc/fișier[1-9]+.php';, le menționez în composer.json și gata.
  • Auto-încărcarea claselor. Pentru că nu-s tont să folosesc porcăria de coding style de la WP, mă axez mai mult pe PSR, iar PSR4 e ce am nevoie, mai ales că n-am nici o jenă în a folosi namespacing.

Cum folosesc Composer?

După ce îl instalezi, faci un fișier numit composer.json în folderul principal al proiectului. Acest fișier arată așa (un minimum):

{
  "require": {
    "ext-json": "*",
    "jasongrimes/paginator": "~1.0"
  },
  "autoload": {
    "psr-4": {
      "ntz\\": "inc"
    },
    "files": [
      "inc/utils/ajax_response.php",
  }
}

După ce faci asta, în consolă, instalezi/inițializezi: composer install.

În functions.php (presupunând că ai o temă) adaugi și autoloaderul:

require_once 'vendor/autoload.php';

Și… cam asta e tot. Fișierele puse în array-ul files vor fi încărcate în ordine, iar clasele care respectă un anumit pattern la nume, vor fi încărcate automat, atunci când le folosești.

Acest pattern pentru clase are câteva reguli:

  • O clasă pe fișier, iar numele clasei se va regăsi în numele fișierului;
  • Namespace-urile respectă structura de directoare începând de la inc.

De exemplu, poți avea namespace: ntz\rest\search și o clasă numită FilterEntries. Eh, clasa asta va avea path-ul inc/ntz/rest/search/FilterEntries.php.

Orice clasă va fi încărcată automat dacă respectă acest pattern.

Deploy

Problem principală a lui Alex era că e pe host shared și nu are cum să ruleze composer install. Șmecheria e că poți rula oriunde această comandă, inclusiv pe local, după care urci tot folderul vendor pe FTP.

Version Control

La fel ca la node_modules, folderul vendor nu stă în VCS. Am eu un pitic, că nu păstrezi cod care nu e al tău :) Sigur, sunt și excepții (gen deploy automat pe Pantheon sau WPEngine, dar, de obicei, vrei aceste foldere să fie excluse.

Cam atât

Este atât de comod tot sistemul încât orice proiect, oricât de mic ar fi, nu scapă fără composer. Alternativa este prea… 2000ish, mai bine nu.

4 Comentarii

Alex Mihăileanu a scris

Eu n-am mai atins un WP/PHP de vreo patru sau cinci ani, de aia nu știam cum funcționează Composer. De vreo doi ani, sînt cu JS și React. Ultima oară cînd mi-am redesenat tema de blog, acu’ vreo lună, mi-a fost atît de lene să o fac local, încît am editat CSS-ul și PHP-urile direct din editorul din admin (LiteSpeed cache, mnah, n-a simțit nimeni) – bine, asta e din cauză că n-am găsit un modul de VSCode care chiar să se conecteze la FTP, că pe local mi-era meh.

Adaugă un comentariurăspuns pentru

Poți adăuga bucăți de cod folosind [code]codul tău aici[/code], [js][/js], [php][/php] etc.

Link-urile în context sunt binevenite. Comentariile fără nume/email valid sunt șterse.
PS: Comentariul NU este editabil.

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.

Site-ul blog.iamntz.com utilizează cookie-uri. Continuarea navigării presupune acceptarea lor. Mai multe informații.

windows apple dropbox facebook twitter