Suurem osa tööst, mida ma praegu teen, keskendub kohandatud pistikprogrammidele või utiliitidele, mis töötavad WordPressi peal.
Kui mõtleksite, kui palju minu loodud projekte on kokku pandud, vaataksite alusena üle WordPressi (ja kõik selle, mis sellega kaasneb) ning seejärel on koodil kiht, mis suhtleb WordPressiga ja mis võib suhelda. kolmanda osapoole API-dega.
Seda tehes on aga sageli olemas esiotsa komponent, mis nõuab teabe mallidesse renderdamist. Kuigi WordPressi mallide loomine ei ole oma olemuselt keeruline (kuigi ma soovin, et meil oleks rohkem kui mallisildid – näiteks mallimootor, see on teine postitus), arvan, et tasub vaadata paari viisi, kuidas saaksime kohandatud mallidega hakkama saada. malle, mille me komplekteerisime pistikprogrammidega.
Üks esimesi küsimusi, mis selle väitega sageli tõstatatakse, on aga
Miks peaksite lisama pistikprogrammi kohandatud malle?
Ja ma saan sellest mõnel tasandil aru.
- Mallide hoidmine pistikprogrammis hägustab veidi jooni teemade ja pistikprogrammide vahel, eriti kui jätate teemad esitluse jaoks ja pistikprogrammid äriloogika jaoks,
- Kui paluda kasutajatel teemafaile ühest kohast teise kopeerida, on kasutuskogemus halb.
Kuid ülaltoodud juhtudel on mõned ümberlükkamised või võib-olla otsesed erandid.
WordPressi template_redirect Hook
Enne kui räägin WordPressi template_redirect konksust, tahan natuke rääkida ülalmainitud punktidest.
1 Pluginate mallid
Kui loote kohandatud pistikprogrammi, mis liidestub nii WordPressi kui ka kolmanda osapoole API-ga või mis kasutab teatud tüüpi hoidlate, tehaste, mudelite ja vaadete kombinatsiooni, peate selle teabe kuvama esiküljel. -end ja see peab olema teemaagnostiline.
See ei tähenda, et keegi ei saaks lehel olevaid elemente stiilida või malli oma töösse lisada, kuid see tähendab, et pistikprogramm peaks andma kasutajale renderdatava teabe põhitaseme.
2 Kasutajatel failide kopeerimiseks palumine on halb
Pidage meeles loosungit, mida Apple kunagi ja sageli reklaamis kui " See lihtsalt töötab? " Kuigi see ei pruugi olla midagi, mida nad nii palju välja pajatasid kui kunagi varem (kui üldse, siis enam), meeldib mulle mõte, et kasutaja jaoks on "lihtsalt tööd" ja see on midagi, mille poole ma oma tegevuses püüan. tööd.
Seega, kui tegemist on pistikprogrammide jaoks kohandatud mallide või vaadete loomisega, ei taha ma nõuda, et kasutaja peaks faile kopeerima. Ma lihtsalt tahan, et nad:
- installige pistikprogramm,
- klõpsake aktiveeri.
Ja see ongi kõik. Ülejäänu peaks olema kas iseenesestmõistetav või hästi dokumenteeritud.
Tagasi Konksu juurde
Olgu, oletame hetkeks, et oleme loonud plugina, mis sisaldab mitmeid põhimalle (või vaateid olenevalt kasutatavast keelepruugist) ja et mallid tuleb kirjutada aktiivse teema kataloogi juure.
Võite kasutada konksu template_redirect (ja paljud populaarsed pistikprogrammid teevad seda). Selle kohta saate rohkem lugeda siit, kuid selle sisu on järgmine:
See toimingukonks käivitatakse vahetult enne, kui WordPress määrab, millist mallilehte laadida. See on hea konks, mida kasutada, kui peate tegema ümbersuunamise, teades täielikult päringu saanud sisu.
Ja, et olla selge, ma ei heiduta seda konksu kasutamast. Pakun lihtsalt alternatiivi. Ja see on see (nagu see peaks toimima järgmiselt):
- aktiveerige pistikprogramm,
- leidke aktiivne teema,
- kui neid veel pole, kopeerige mallifailid pistikprogrammist aktiivse teema juurkataloogi
Viimane samm on kriitiline, sest kui mallifailid on olemas, on oluline neid mitte üle kirjutada peamiselt seetõttu, et kasutaja oleks võinud oma kohandused kirjutada.
Seda arvestades saate seda teha ühe funktsiooniga (koos kommentaaridega, mis näitavad, mida te kasutate).
<?php
add_action('plugins_loaded', __NAMESPACE__. 'acmeCopyTemplates');
/**
* Copies the template files from the `assets/templates` directory to the root directory
* of the currently active theme (if they do not already exist).
*/
function acmeCopyTemplates()
{
// Find the currently active theme.
$activeThemeDir = get_template_directory();
/**
* Read all of the template files from assets/templates into an array but
* exclude the '.' and the '..' from the array.
*/
$templates = array_slice(scandir(dirname(__FILE__).'/assets/templates'), 2);
/**
* Now copy all of these files to the active theme directory.
* If the file already exists, then don't do it.
*/
foreach ($templates as $template) {
if (!file_exists($destination = trailingslashit($activeThemeDir).$template)) {
continue;
}
$source = dirname(__FILE__).'/assets/templates/'.$template;
$destination = trailingslashit($activeThemeDir).$template;
copy($source, $destination);
}
}
Pange tähele, et see kasutab mitmeid PHP funktsioone. Nimelt:
Kõik need on minu arvates käepärased ja olulised teada, olenemata nende kasutamise olemusest.
Kas võõrustajad toetavad seda?
Mõned võõrustajad teevad seda. Ma tean kindlalt, et sellised hostid nagu WPEngine seda ei tee ja see pole ka hosti kriitika. Mõned teevad seda turvakaalutlustel; teised lubavad seda, kuid see ei tähenda, et nad on vähem turvalised – see tähendab lihtsalt seda, et nende infrastruktuur on seadistatud teisiti.
Lõppkokkuvõttes näitab see, et on ka teisi viise, kuidas pistikprogrammi kasutamisel malle kasutajatele kättesaadavaks teha, kuid see pole ainus viis ja see ei pruugi alati töötada.
Valikute olemasolu on aga hea, eriti kui eelistate oma pistikprogrammis mõnda konkreetset arhitektuuri teisele.