WordPress & Composer pentru autoload-ul claselor
Unul dintre cele mai frustrante lucruri pe care trebuie trebuia să le fac era să includ toate clasele în functions.php
(sau, dacă scriam un plugin, în plugin.php
). Doar că… se poate și altfel, folosind Composer.
Instalarea Composer
În funcție de cum tratezi proiectul, poți instala composer ori în directorul temei, ori în wp-content
. În terminal va trebui doar să scrii composer init
și să urmezi pașii. Nu este nevoie să alegi nici un pachet în acest moment, ci doar să ai un composer.json
în rădăcina proiectului. După ce ai terminat toți pașii, este nevoie să rulezi și composer install
.
Acum, din functions.php
va trebui să incluzi vendor/autoload.php
. Dacă ai ales instalarea în wp-content
, va trebui să îl incluzi așa:
require_once( WP_CONTENT_DIR . '/vendor/autoload.php' );
Dacă îl incluzi din directorul temei, va trebui să-l incluzi așa:
require_once( 'vendor/autoload.php' );
Autoload
Pentru a avea un autoload funcțional, va trebui să mai adaugi ceva în composer.json
:
"autoload": { "psr-0": { "foo\\": "includes/", "bar\\": "includes/" } }
De asemenea, va trebui să urmezi câteva reguli foarte simple:
- Un fișier va conține o singură clasă, indiferent cât de mică e clasa (și ar trebui să fie mică! Ba chiar mai mică de atât!);
- Numele fiecărui fișier trebuie să fie același cu numele clasei;
- Numele clasei va trebui scris folosind CamelCase (și nu snake_case);
- Fiecare clasă va folosi Namespaces;
- Fiecare clasă va trebui să urmeze același format și în namespace și în file system
- După adăugarea/ștergerea unui namespace nou în
composer.json
va trebui să rulezicomposer install
Scurt exemplu
<?php // includes\foo\AutoloadedClass.php namespace foo; class AutoloadedClass {} ?>
<?php // includes\bar\baz\AutoloadedClass.php namespace bar\baz; class AutoloadedClass {} ?>
Din functions.php
(și cam de oriunde din temă de fapt), voi putea rula new foo\AutoloadedClass
fără a fi nevoie să fac vreun alt require decât cel menționat mai sus.
- Posted in:
- WordPress
- Tags:
- autoload,
- composer.json
Singura problema cu exemplul dat sunt namespace-urile. Daca e o tema pe care nu o s-o folosesti doar tu, WordPress suporta PHP 5.2.4 iar namespace-urile sunt de la 5.3 incolo, deci momentan nu sunt safe.
@C: comform ultimelor statistici, PHP 5.2.x este folosit de vreo 15% din utilizatorii de WordPress. Acum, că această versiune a devenit un fel de IE6 e o treabă; că alegi tu să suporți o versiune ce nu mai primește update-uri de câțiva ani e o altă treabă
Ce parere ai de un WordPress + Laravel ?
De ce ai vrea să faci asta?
Mi-a cerut un client treaba asta, el are deja un site care ruleaza pe WordPress si mi-a spus ca partea de back-end ar vrea sa fie facuta cu Laravel, Lumen stiu ca se poate integra chiar in teme de wp iar laravelu poate fi folosit pe partea de back-end. Nu stiu daca se merita dpdv al vitezei site-ului si ce avantaje ar avea clientul daca el vrea treaba asta… Eu unul sincer nu vad vreun avantaj in toata treaba asta… Ba chiar mi se pare ca se complica asa
L-ai întrebat și care ar fi motivele?
Singurul motiv invocat de el a fost ca e familiarizat sa il ruleze asa… And I said ok then…
Foarte drăguț din partea lui
Caută-ți alt client.