Uitgestelde afbeelding Loading - Luie Load-plug-ins voor WordPress. De beste manier om plug-ins op te lossen voor PHP-applicatie traagse plug-in PHP

  • 20.06.2020

Functiebestand - Entertaining Assistant bij het uitbreiden van de functionaliteit van de site! Inderdaad, indien gebruikt voor het beoogde doel, echter, vele blog / site-eigenaren die prachtig functions.php naar het Solonka-team veranderen.

In elk geval zijn er haalbaarheid en beperkingen (beperkingen, vaker logisch) en daarom een \u200b\u200benkele uitvoerbare code, ontworpen om de parameters van de WP-kernel (niet het onderwerp) aan te passen, correcter uit de sjabloon ...

Wanneer het gesprek is op de modernisering van de functionaliteit van de site, in het opstellen van artikelen "zonder plug-ins ..." raadplegen zeker om alle codeblokken in de legendarische functies te duwen.php. Het is niet goed!

Alle puur technische extensies (niet met betrekking tot direct stijlsjabloon) is logischer om de ingevoegde plug-in over te dragen voor hun registratie.

Creëer het! En ook plafond over de voordelen en minussen (KOOIM is aanzienlijk minder) ...


Secties Artikelen:

hoe u uw plug-in kunt maken

in de onderstaande tekst leren we hoe u uw eigen plug-in kunt maken als u hand: deal in alle details, nuances. We leren wat de voor- en nadelen (minussen minder zijn !! en liever, het is niet op alle nadelen, maar een of andere haalbaarheid voor elke beheerder)

wat is het verschil tussen het Functions.php-bestand van de plug-in

Waarom zou een code rechtstreeks aan de site-functionaliteit moeten gebruiken, overbrengen naar een aparte plug-in?

Het meest functiesbestand, het doel en het uiterlijk is niet anders dan de plug-in (gewoon - de plug-in in het onderwerp))! - de hoofdtaak is om de bruikbare functionaliteitsjabloon (Active) te verrijken.

Bijvoorbeeld, "navigatie", indien logisch, het menu van de knoppen is ingericht CSS, respectievelijk, de stijl van het actieve thema - kan meer correct zijn om in de wortel van de sjabloon te vertrekken.

Wat is het voordeel - Splits het Functions-bestand om bestanden of een aparte plug-in te scheiden?

Bijvoorbeeld, de meest banal - heb je besloten om de sjabloon te veranderen!? ... Als gevolg hiervan zullen alle functionele ontwikkelingen verdwijnen, omdat de gehele handige code zich in het Functions-bestand bevindt (ik zag een dergelijke bestandsgrootte 750KLO)

Natuurlijk kunt u documentatie overdragen van functies naar een nieuw onderwerp, maar - de kop van alles, zonder bewerking, die veel nuttige tijd wegnemen, kan niet doen: aap en werk)

En dan:

site-bestand downloaden

KORT: de procedure voor het downloaden van de site-kernel-bestanden in ons voorbeeld, is de actieve site-plug-ins (van de map Plug-ins) en hun inhoud en vervolgens het bestand Functions.php met inhoud wordt verwerkt. Het zijn allemaal milliseconden en het is onwaarschijnlijk dat er een serieus praten over het winnen van de snelheid van pagina's.

Hoewel het lijkt erop dat een van de redenen voor een dergelijke bevel die is geïnstalleerd door ontwikkelaars waar de tweede plaats is toegewezen aan het Functions-bestand (zoals vermoedelijk Gemakkelijker element), alleen het feit van het brede gebruik van plug-ins, vaak massale inhoud ...

Iemand roept uit: nog een plug-in ...? het is moeilijk!

En ik zeg, want geen snelheid zal het niet van invloed zijn op ... eerder, integendeel, als het attent is om een \u200b\u200bsite te maken.

Bovendien is het voordeel van de overdracht van een code voor de hand in de andere, namelijk, de site laadsnelheid afhankelijk van het aantal actieve plug-ins, maar van hun inhoud! Dus waarom zou u het functiebestand dat, zoals vermeld, een beetje later niet verkleinen ..? En bovendien is het een volwaardig massief plug-in sjabloonniveau! Dus waar is de plaats van de meeste van zijn code?

Naar mijn mening moet (actieve, werkende) sjabloon alleen zijn parameters met betrekking tot specifiek bevatten.

excursie naar rekenkundige ...

  1. er wordt later geladen, wordt gevraagd waarom het niet overboeken waar de code verwerking in de eerste plaats wordt uitgevoerd, en, respectievelijk, ingesteld door de beheerders van de WP-kernelparameters sneller wordt gelezen en verwerkt in de bijbehorende fase van het opstarten van de site.
  2. de beruchte haalbaarheid en logische organisatie van de sitefunctionaliteit.
  3. voorzieningen die niet belangrijk zijn!

Bovendien, zoals het werd gezegd, is het Functions-bestand dezelfde plugin, "zal ik het opnieuw vragen, waarom is alles dat in hem om hem te duwen? En in het proces van het werken met de site, in de war in een enorm, moeilijk om het document te lezen, dat trouwens ongelooflijk en ongerechtvaardigt de inhoud ervan zal omgaan.

Het is gemakkelijker en logischer om een \u200b\u200blichte plug-in te maken, op te zetten en te vergeten ...

Kortom, iedereen beslist: luisteren naar zijn ervaring, of naar de mening van de auteur van een trainingsartikel.

Dan volgt het de WordPress-bibliotheken, maar niet door artikelen ... van artikelen is het mogelijk om slechts één idee te trekken ...

Op de een of andere manier, dus hier)

... voor degenen die geïnteresseerd zijn:

onderzoek alle regels van de kernel (en trouwens de uittrekking van de laadmappen)) kan prachtig zijn in WordPress-codes.

... in een van de volgende artikelen, gewoon zo'n pheaker! ... en links naar nuttige pagina's.


! .. Aanmelden bij updates website -
... breekt met onwetendheid ..!

hoe een plug-in te maken van een extra bestandsfuncties.php

De geposte plug-in is natuurlijk een eenvoudige oplossing, maar het onderzoek moet beginnen bij Azov!

Bovendien, om de doelstellingen in het artikel te bereiken, hebben geen krachtige plug-ins niet nodig!

We gaan naar het hostingpaneel van de host (of ftp-tools) opent u de bestandsbeheerder.

Open de map Plug-ins en maak een andere map in (map voor bestanden van onze plug-in). De naam is absoluut elk, in het Latijn. Ik heb de naam "Test" als een voorbeeld.

Houd er rekening mee dat de naam van de Plug-in-beheerder zo is dat in de naam van de plug-in wordt geschreven: Testinformatiekop (zie opmerkingen).

Open de gemaakte map en maak het Master Plugin-bestand in:

... met de titel, zeg mijn functions.php en breng dergelijke lijnen naar zijn lichaam (en de bestandsnaam kan absoluut elk zijn)

Rijen in opmerkingen - Informatie over de plug-in, die verschijnt in het Admin-paneel (Plug-in-menu).

Direct na het maken van een map en bestand verschijnt uw plug-in in de beheerder. Kijken.

Als exe kun je het een tijdje activeren - maar er gebeurt niets, de plug-in is nog steeds inactief.

Dat is alles!! Een eenvoudige plug-in is gemaakt en, opmerkelijk, met hun eigen handen voor zijn eigen gebruik (zoals de kat van Matroskin vroeg om te zeggen).

Op dit gordijn van de presentatie gaat naar beneden ...
... Ramps Dust Sad Lies ...

Maar trouwens, en nuttige bioscoop van de tv-serie "Zonder plug-ins" - zie, denk of de code die in de videocode in het Function-bestand wordt gesuggereerd ??

Zeker, u hebt herhaaldelijk tegengekomen dat u een stuk code voor uw site op WordPress moet toevoegen om nieuwe functionaliteit toe te voegen. Ik spreek nu niet over de scripts van Google-analisten die u in koptekste deel van uw onderwerp invoegt. Niet. I Over die kleine fragmenten van de code die u op de forums op het internet hebt gevonden en onmiddellijk liep om ze toe te voegen aan uw bestand functions.php..

Laten we eerlijk zijn, omdat je het ten minste eens hebt gedaan, toch? En dit is begrijpelijk, omdat het op het forum is geschreven - voeg deze code toe in functions.php Uw onderwerp op WordPress.

De waarheid is dat het toevoegen van elk internet gevonden code in functions.php - niet altijd goed idee. Een veiliger besluit zorgt voor uw aangepaste mini-plug-in met deze code.

In deze les zullen we vertellen, in welke gevallen kun je code toevoegen aan functions.php, en waarin het beter is om een \u200b\u200baparte plug-in te gebruiken. We laten ook zien hoe u een aangepaste plug-in kunt maken en uw code wilt toevoegen.

Wat is functions.php.

Als u ooit klom op de bestanden van uw WordPress-site, kunt u in verschillende functies.php-bestanden struikelen. Functions.php-bestand, waarover we in deze les zullen praten staan \u200b\u200bin de map: WP-contenthemesbach_memfunctions.php.

Uiteraard is dit het bestand dat alle functies en instellingen voor uw specifieke thema opslaat, actief op dit moment. Let op het woord "Active", omdat hierin de hoofdboodschap van deze les zal zijn.

Waarom altijd functions gebruiken.php is een slecht idee

Begrijp het niet verkeerd, gebruik functies.php voor kleine stukjes code in een paar lijnen - dit is een volledig normale situatie. We hebben het over het feit of het ongewenst is om functions.php te gebruiken als een magazijn voor absoluut alle code die je hebt toegevoegd. Dit is geen universele oplossing voor elke situatie.

Oorzaak №1.

Als een update wordt weergegeven voor uw ontwerpthema, verliest u alles wat u toevoegt in het FunctionS.php-bestand. Ik weet wat je gewoon dacht - maar is het alleen voor dergelijke situaties?

Natuurlijk. Maar er zijn ook veel mensen die geen idee hebben wat een dochterthema is. Of er zijn mensen die voor je wendden om hulp toe te voegen aan een stuk code in hun onderwerp.

Daarom staat deze reden op deze lijst. Als u code aan functions.php toevoegt zonder een dochteronderneming te gebruiken, is dit uw eerste alarmerende bel.

Oorzaak # 2.

Zelfs als u correct instelt en een dochteronderneming gebruikt. Wat gebeurt er als je naar een ander ontwerponderwerp wilt gaan? Ik hoop dat je een opmerking hebt toegevoegd over elke wijziging in je functions.php-bestand, want zonder dit, zal de overgang naar een ander onderwerp extreem pijnlijk zijn. Ik denk dat je een gedachte hebt gevangen.

Oorzaak nummer 3.

Als u code hebt toegevoegd aan functions.php, die volledig onverwacht uw site heeft verbroken, en u ziet een leeg wit scherm - u hebt een FTP-client nodig om "verwend" functions.php te downloaden, het te bewerken en terug te sturen naar de site. Plezier is zichzelf.

Wanneer u functions.php kunt gebruiken

Juist gebruik van functies.php voor een dochteronderneming, actief op dit moment is een toelaatbare optie. Maar vergeet niet dat ik op dit woord gefocust heb " actief"?

Als u porties van de code toevoegt die alleen logisch is om met dit onderwerp specifiek met dit onderwerp te werken, kunt u veilig functions.php (in een dochteronderneming) gebruiken. Hier zijn enkele voorbeelden wanneer het geschikt is:

  • Een ander stijlbestand (.css) voor uw onderwerp toevoegen
  • Veranderen van de lengte van de opname-aankondiging (post-fragment) zodat de site er beter uitziet
  • Aangepaste lettertypen toevoegen voor huidig \u200b\u200bthema
  • Een lokalisatiebestand toevoegen om het huidige thema te vertalen

Met andere woorden, telkens wanneer u iets toevoegt of verandert met betrekking tot een specifiek huidig \u200b\u200bonderwerp, kunt u functies.php veilig gebruiken.

Wanneer het beter is om te doen zonder functions.php

Gebruik functies.php om meer wereldwijde dingen en functies toe te voegen die u theoretisch handig kunt zijn en voor een ander onderwerp - dit is een slecht idee.

Hier zijn een paar voorbeelden wanneer het beter is om te doen zonder functions.php:

  • Aangepaste widgets maken die u vaak zult gebruiken
  • Aangepaste shortcodes maken
  • Een code toevoegen die niet afhankelijk is van het onderwerp van registratie (Google Analytics-code, enz.)

In dergelijke gevallen is het beter om deze code op te slaan, ongeacht uw ontwerponderwerp. En je kunt het doen met aangepaste plug-ins.

Heb je nu gedacht - breek je hoofd over de creatie van een plug-in wanneer je functions.php kunt bewerken? Het is te moeilijk! Geloof me, het is dat niet. Dit gebeurt heel gemakkelijk en snel.

Hoe een aangepaste plug-in in te stellen in plaats van functions.php

Om uw aangepaste plug-in te maken voor het opslaan van uw code, hebt u nodig:

  1. Maak een tekstbestand met uw code en sla deze op als .fp-bestand
  2. Pakket ontvangen.php-bestand V.ZIP-archief
  3. Stel dit archief in als een normale WordPress-plug-in in het menu Plug-ins → nieuw toevoegen

Dat is alles, slechts 3 acties.

Stap 1. Maken.php-bestand met uw code

Open een blocnote op uw computer en plaats de volgende tekst:

Natuurlijk kunt u uw naam gebruiken voor plug-in in de naam van de plug-in-naam:

Sla het bestand op en geef het een soort unieke naam zodat WordPress uw plug-in niet verwarren met de reeds geïnstalleerde. Bijvoorbeeld: wpcafe-custom-functions.php.

Ja, vergeet niet wanneer u opslaat om het type bestanden "alle bestanden" te selecteren en de extension.php toe te voegen:

Stap 2. Maak.zip-archief

Ik denk dat er hier geen verklaring is. Maak gewoon. ZIP-archief met uw bestand elke handige archiver.

Stap 3. Installeer als een gewone plug-in

Het eenvoudigste deel. Ga gewoon naar WordPress Adminka in Plug-ins → nieuw toevoegen En download uw archief als de meest gewone plug-in.

Zodra u het activeert, kunt u uw nieuwe plug-in zien in de lijst van alle andere geïnstalleerde plug-ins:

Uw code toevoegen

Als u uw codefragment wilt toevoegen, plaatst u deze eenvoudig in het bestand.php die u hebt gemaakt. Of u kunt altijd een andere afzonderlijke plug-in maken voor twee verschillende functies.

Dit lijkt bijvoorbeeld op je bestand.php, als je een shortcode wilt maken "Hallo World!":

Deze opmerkingen hebben geen invloed op de prestaties van uw code en de snelheid van de plug-in. Maar u zult gemakkelijker zijn om met hen te navigeren en te onthouden dat het elke functie maakt die u hebt toegevoegd.

Wikkel gewoon uw reactie in de syntaxis van schuine en sterretjes: /* jouw commentaar */

Na het aanbrengen van wijzigingen in uw code kunt u opnieuw opstarten.php-bestand via FTP of gewoon een nieuw ÉÉN.ZIP-archief maken en als een nieuwe plug-in downloaden en oud verwijderen.

Andere manieren om Edkes.php te vermijden

Tegen en groot, als u zeker bent in uw vaardigheden en weet hoe u code in functions.php kunt toevoegen, moet u geen moeilijkheden hebben en met aangepaste plug-ins. Er is hier niets gecompliceerd.

Maar we begrijpen het perfect, als je geen verlangen hebt om met dit alles handmatig te rommelen. Niettemin is het WordPress. Daarom kunt u de plug-in van de gratis code-snippets gebruiken, waardoor het eenvoudig is om uw aanvullende code aan de site toe te voegen:

Met deze plug-in kunt u verschillende fragmenten toevoegen aan de code, geef ze de naam, de beschrijving, activeer en ontkoppel de selectieve of een andere fragmentcode.

Een andere coole functie is dat u uw codefragmenten tussen sites kunt importeren / exporteren.

Resultaten

Dit lijkt misschien onbeduidend effect, maar de juiste locatie van uw aanvullende code kan u zonder problemen tussen andere ontwerponderwerpen wisselen. U kunt ook één functionaliteit afzonderlijk opnemen of loskoppelen als u elke extra functie tussen afzonderlijke plug-ins verdeelt.

Dus deze methode verdient echt aandacht.

cMS MYSQL (4)

Ik probeer een basis plug-in-systeem te maken, vergelijkbaar met die vaak in CMS, zoals WordPress. U hebt een plug-in-map die is gebonden aan het hoofdsysteembediening met behulp van meldingen over evenementen S. Ontwerpsjabloon gebruiken Waarnemer. of Evenement .

Het probleem is dat het systeem niet kan weten welke evenementen De plug-in wil handelen - daarom moet het systeem elke plug-in laden voor elke paginaverzoek om erachter te komen of deze plug-in op een gegeven moment echt echt nodig is. Het spreekt vanzelfsprekend, het is veel hulpbronnen geïnvesteerd - in het geval van WordPress, die voor elk verzoek verschijnt aan verschillende extra MB geheugen voor elk verzoek!

Zijn er alternatieve manieren om het te doen?

Is er bijvoorbeeld een manier om dit allemaal een keer te downloaden en vervolgens de resultaten te cachen, zodat uw systeem weet hoe plug-ins voor lui opstarten? Met andere woorden, het systeem laadt het configuratiebestand waarin alle gebeurtenissen worden aangegeven dat de plug-in wil binden en bespaart ze vervolgens in APC of iets voor toekomstige aanvragen?

Als het ook slecht werkt, is er misschien wel een speciale bestandsstructuur die kan worden gebruikt om redelijke aannames te verkrijgen over wanneer sommige plug-ins niet nodig zijn om de query uit te voeren.

Antwoorden.

Ik heb een stug-in managementtool, maar ik gebruik het alleen met procedurele plug-ins en met alle meegeleverde plaats wordt meestal onmiddellijk geladen. Maar voor de API, op basis van evenementen en luie download, zou ik kunnen indienen met kleine wrappers voor het besturen van de plug-ins en het toevlucht nemen tot automatisch laden voor werkelijke extensies.

/ ** * API: WAT * Versie: 0.1 * Titel: Plugin Voorbeeld * Beschrijving: ... * config: * Afhankelijk: Overig Plugin * / $ plug-ins ["title_event"] \u003d "titleeventclass"; $ plug-ins ["secundair"] \u003d array ("klasse2", "callback"); ?\u003e.

In dit voorbeeld neem ik aan dat de plug-in API een eenvoudige lijst is. Dit voorbeeld van het feature-plugin-123.php-script doet niets anders dan toevoegen aan de array bij het laden. Dus, zelfs als u een dozijn plug-infuncties hebt, zal het alleen maar leiden tot een extra include_once aan elk.

Maar de hoofdaanvraag / of de plug-in-API kan in plaats daarvan simpelweg instanties van de klassen (of nieuwe $ EventCB; voor RAW-CALL_USER_FUNC_ARRAY of CALL_USER_FUNC_ARRAY voor callbacks) maken. Dit zal op hun beurt leiden tot de belasting van de werkelijke taak van de autoloader. U hebt dus een dubbel systeem, waarbij één onderdeel de lijst bestuurt, is de andere een echte code.

Dus stel ik me nog steeds een eenvoudige config.php voor die eenvoudig de plug-ins en instellingen zoals deze weergeeft:

"Gebruiker / wrapper-for-htmlpurifier.php"); $ CFG ["mooi"] \u003d 1;

Nogmaals, rekening houdend met het feit dat het slechts schelp / gegevensscenario's is, met een beschrijving van de plug-in voor controleerbaarheid. U kunt de API van de daadwerkelijke register_even () ook gebruiken en een extra wikkelfunctie in elk. Maar de lijst met klasnamen lijkt de eenvoudigste optie.

De hiervoor genoemde controletool ziet er roestig en lelijk uit: http://milki.include-once.org/genericPlugins/
Maar het wordt niet gebruikt als u alleen een lijst (SQL-tabel) en instellingenbeheer nodig heeft. Deze overheadkosten zijn alleen bedoeld voor het prachtige afdrukken van de plug-in metadata en opslaan Config.php leesbaar.

Tenslotte:

sPL_AUTOLOAD () IN COMERIAL_PATH EN EEN EENVOUDIGE EVENTIE-\u003e ClassName-register, één script-schelp elk, brengt alles tegelijk aan.

Ik zou de naam van de Plugin-klasse opslaan, samen met de ondertekende gebeurtenissen in het configuratiebestand en vervolgens het geanalyseerde configuratiebestand in APC, bijvoorbeeld opgeslagen. Vervolgens, wanneer het evenement begint, kan het systeem lui zijn om de overeenkomstige klassen van plug-ins als nodig te laden.

WordPress en andere CMS-systemen zijn zeer slechte voorbeelden.

We moeten begrijpen dat de modulaire, bijna altijd betekent dat het moeilijker is.

Het beste schema waarmee ik ooit heb gewerkt om deze situatie op te lossen, is een class-gebaseerde plug-in, met een strikte naamovereenkomst met behulp van de autoloader.

Aldus, voordat u de plug-in gebruikt, moet u een instantie maken of statische functies gebruiken.

U kunt de plug-in zelfs bellen:

bijv.:

"/Plugins/($ssparts)/($$$$$ts).php"); Breken; ) // ...)?\u003e

Wat betreft evenementen:

U moet dit evenement statisch registreren om dynamische verandering te voorkomen.

De database is hiervoor de juiste plaats. U kunt evenementen en installatie () en de installatie van () in de classificatie van de plug-in installeren om bepaalde gebeurtenissen of bindende methoden aan andere evenementen toe te voegen. Dit is één query naar de database en als u er meer van wilt halen, voeg deze toe aan Memcached of in een Flat InI-bestand.

Werkt goed voor mij. Dus, ik erin geslaagd om een \u200b\u200bzwaar systeem te krijgen dat 8 MB verbruikt om te vragen om tot 1 MB te vallen, met precies dezelfde lijst met functies, zonder voorafgaande caching. Nu kunnen we meer functies toevoegen en het systeem "Clean" onderhouden

ik hoop dat dit zal helpen

De beste manier is om met hen te coderen. Ontwerpsjablonen zijn een uitstekend concept dat moeilijk aan te brengen is, alleen het lezen ervan. Neem een \u200b\u200bpaar voorbeelden van implementaties die u op internet vindt en om hen heen maakt.

Een uitstekende bron is de pagina "Gegevens en object". Ze bladeren door patronen en geven je zowel conceptuele als echte voorbeelden. Hun referentiemateriaal is ook geweldig.

Dit is het hoofdbestand in uw WordPress-thema. In / WP-inhoud / thema's / (hier is de naam van uw onderwerp) /functies.php.
Het definieert de belangrijke eigenschappen van het onderwerp, de haken, uiterlijk en de functionaliteit ervan zijn aangepast en sommige van de functies die u nodig hebt, worden toegevoegd. Dit bestand wordt geladen telkens wanneer u elke WordPress-pagina opent, zodat u er een element van de site ermee kunt wijzigen. In dit opzicht, veel tips a la " hoe iets in WordPress te veranderen zonder plug-ins »Geef zich vaak bezig met het maken van wijzigingen in functions.php, in plaats van een afzonderlijke plug-in op deze functionaliteit te maken of gebruik de voltooide oplossing. Vaak leidt dit tot de informatieoverbelasting van dit bestand, de code wordt moeilijk om te demonteren, en het is nog moeilijker om correcties te maken. Maar dit is niet het gevaarlijkst. De gevaarlijkste is dat wanneer een enquête wordt gewijzigd, zal deel of alle benodigde sitefunctionaliteit verdwijnen.

Wat is het verschil tussen functies.php van de plug-in

. In Essence, Functions.php is een soort van wereldwijde onbetwiste plug-in, die is gebonden aan het huidige onderwerp. Omdat het verbinding maakt met WordPress, kunt u WP-instellingen.php zien. Zoals te zien is in de broncode, vindt het downloaden na alle plug-ins echter, dit geeft echter geen nadelen of voordelen, behalve het vermogen om iets in de aangesloten plug-ins te negeren. Voor de snelheid van de code zal het niemand beïnvloeden. Alleen de inhoud van plug-ins en functions.php is van invloed op. Wees daarom voorzichtig bij het kiezen van actieve plug-ins voor uw thema en het opgeven van onnodig, onnodig voor u, dan kunt u uw site gemakkelijk faciliteren en zijn werk versnellen.

Wanneer u functions.php moet gebruiken

Volg de volgende regel: als de functionaliteit rechtstreeks verband houdt met het huidige onderwerp, maar niet met het werk van de site, schrijf het dan met functions.php.

Het kan bijvoorbeeld zijn

  • Miniatuur instellen
  • Instelling Maten Schidbarov
  • De plaatsen voor de widgets instellen
  • Aankondiging van plaatsen voor navigatiemenu
  • Onderwerpen-instellingen
  • Extra functies van uw onderwerp

Wanneer te vermijden met behulp van functies.php

Als de functionaliteit zou moeten werken, zelfs met een verandering van een actief onderwerp, is het de moeite waard om voor de inzending van een afzonderlijke plug-in te zorgen.
Dit kan worden toegeschreven:

  • Definitie van aanwezigheidssen (Google Analytiys, Yandex.Metrika, LiveInternet)
  • Pas de extra beheerdersfunctionaliteit aan (bijvoorbeeld)
  • De broncode configureren ()
  • Definitie van shortcodes
  • Check in

Onvolledige lijsten, kunt u hun inhoud zelf voor uzelf definiëren.

Waar moet u deze code maken, zo niet in functions.php? Je kunt speciale plug-ins schrijven, maar er is een manier interessanter en eenvoudiger.

mU-plug-ins als alternatief voor functions.php

Aan ons in de moderne versies van WordPress van WordPress MU (multi-user) kwam interessante functionaliteit, genaamd Mu plug-ins.. De essentie was als volgt. De WordPress MU-beheerder vereist soms om plug-ins voor het volledige netwerk van sites te definiëren. Het was niet mogelijk om de gebruikelijke functionaliteit te bereiken, dus ze introduceerden een speciale sectie: / WP-inhoud / MU-plug-ins /, waar ze werden bepaald. Een andere interessante, plug-in-bestanden uit deze map worden geladen voor alle anderen, waardoor het mogelijk maakt om een \u200b\u200baantal constanten of instellingen voor te staan.
Later werd WPMU afgeschaft, de code is geïntegreerd met de hoofdblog, en nu kan elk WordPress de MU-plug-ins-functionaliteit gebruiken, die nu is ontcijferd als Moet gebruiken., dat wil zeggen, verplicht voor gebruik.

Hoe MU-plug-ins te gebruiken

Eerst moet u een speciale sectie / wp-inhoud / MU-PUGINS / MU-PUGINS /
Daarin plaatsen we de gewenste plug-in-bestanden. In tegenstelling tot conventionele plug-ins is het niet nodig om een \u200b\u200bspeciale syntaxis te weerstaan \u200b\u200ben kan de functionaliteit direct worden aangekondigd

Hier is bijvoorbeeld een bestand gemaakt met de code van aanwezigheidscellers.
In dit bestand ziet er als volgt uit

// ... in plaats van deze regel, plaats de Counters-code ...

In de admin zal hij eruit zien Vereist

8 antwoorden

U kunt de Observer-sjabloon gebruiken. Een eenvoudige functionele manier om dit uit te voeren:

Uitvoer:

Dit is mijn gekke applicatie 4 + 5 \u003d 9 4 * 5 \u003d 20

Notities:

In dit voorbeeld moet de broncode u al uw plug-ins verklaren vóór de werkelijke broncode die u wilt uitstrekken. Ik heb een voorbeeld opgenomen van het verwerken van een of meer waarden die door de plug-in zijn verzonden. Het moeilijkste deel hiervan is om de daadwerkelijke documentatie te schrijven, die lijsten welke argumenten naar elke haak worden verzonden.

Dit is slechts één manier om een \u200b\u200bplug-in systeem in PHP te maken. Er zijn de beste alternatieven, ik stel voor dat je vertrouwd bent met WordPress-documentatie voor meer informatie.

Sorry, het lijkt erop dat de undercians worden vervangen door HTML-markdown-objecten? Ik kan deze code opnieuw publiceren wanneer deze fout zal worden opgelost.

Bewerken: Nevermind, het verschijnt alleen wanneer u bewerkt

Dus laten we zeggen, je hebt het waarnemingspatroon niet nodig, omdat het vereist dat je de klassenmethoden verandert om de luistertaak af te handelen en iets gemeen te krijgen. En laten we zeggen dat je niet wilt gebruiken, uitbreidende erfenis, omdat je al je klasse van een andere klasse kunt erven. Het zou leuk zijn om een \u200b\u200balgemene manier te hebben om elke klas te maken zonder veel moeite? Hier is hoe:

_Class \u003d get_class (& $ RefoBject); $ This -\u003e _ Refobject \u003d $ RefoBject; ) Publieke functie __Set ($ Sproperty, $ gemengd) ($ Splugin \u003d $ This -\u003e _-klasse. "_". $ SPROPERTY. "_SETEVENT"; ALS (IS_CALLBARE ($ SPLOTIN)) ($ MIXED \u003d CALL_USER_FUNC_ARRAY ($ Splotin, $ gemengd);) $ This -\u003e _ Refoobject -\u003e $ Sproperty \u003d $ gemengd;) openbare functie __get ($ Sproperty) ($ Asitems \u003d (array) $ This -\u003e _ Refoobject; $ gemengd \u003d $ Asitems [$ Sproperty] ; $ Splotin \u003d $ This -\u003e _ Class. "_". $ Sproperty. "_GetEvent"; if (is_callable ($ splotin)) ($ gemengd \u003d call_User_func_array ($ splotine, $ gemengd);) Retourneer $ gemengd;) Functie __Call ($ Smethod, $ gemengd) ($ Splotin \u003d $ this -\u003e _ les. "_". $ Smethod. "_beforeefeVent"; if (is_callable ($ Splotin)) ($ gemengd \u003d call_User_func_array ($ Splotin, $ gemengd );) Indien ($ gemengd! \u003d "block_event") (call_user_func_array (array (& $ -\u003e _ refoobject, $ Smethod), $ gemengd); $ Splotin \u003d $ this -\u003e _ les. "_". $ Smethod. "_AfterEvent"; if (is_callable ($ Splotin) (Call_User_Func_array ($ Splotin, $ gemengd);)))))))) // Eind CLAS Plugin ClugGable Excurrent Plugin () // Eindklasse PL Ugbeld / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /// //// / / / / / / / / / / / // naam \u003d ""; Openbare functie schors (& $ show) (echo "$ show
\\ n ";) Publieke functie SayName () (ECHO"
\\ Nmy naam is: ". $ This-\u003e naam."
\\ n ";)) // eindklasse hond $ hond \u003d nieuwe hond (); ////// // / / / / / // // // / / part 3 //////// ////// / / /// / $ PDOG \u003d Nieuwe pluggable ($ hond); functie Dog_bark_beforeefeVent (& $ gemengd) ($ gemengd \u003d "WOOF"; // Override: "MEOW" met "WOOF" / / $ MIXED \u003d "BLOK_EVENT"; // Als u het evenement wilt blokkeren, retour dan gemengd;) functie dog_bark_afterevent (& $ gemengd) (echo $ gemengd; // tonen de override) functie dog_name_setEvent (& $ gemengd) ($ gemengd \u003d "COCO"; // negeren "FIDO" met "COCO" return $ gemengd;) functie dog_name_getevent (& $ gemengd) ($ gemengd \u003d "verschillend"; // negeren "coco" met "verschillende" retour $ gemengd;) / ////// / / / / / / //// // / / / / / / / / / / / / / / / // / // / $ pdog-\u003e naam \u003d "fido"; $ PDOG-\u003e BARK ("MEOW"); $ PDOG-\u003e SINNAME (); ECHO "MIJN NIEUWE NAAM IS:". $ PDOG-\u003e NAAM;

In het eerste deel, dat u kunt inschakelen met de aanvraag_once () bel bovenaan uw PHP-script. Het laadt de klassen om iets verbonden te doen.

In deel 2, waar we de klas downloaden. Opmerking. Ik hoefde niets speciaals voor een klasse te doen, wat aanzienlijk anders is dan de Observer-sjabloon.

In deel 3, waar we onze klasse naar "verbonden" (d.w.z. kunnen schakelen, ondersteunen we plug-ins waarmee we de methoden en eigenschappen van de klasse kunnen overschrijven). Als u bijvoorbeeld een webtoepassing hebt, kunt u een register van plug-ins hebben, en u kunt plug-ins hier activeren. OPMERKING Ook op de functie Dog_Bark_BeforeEvent (). Als ik $ gemengd \u003d "block_event" voor de retouroperator installeerde, blokkeert het de hond van Laya en blokkeert ook Dog_Bark_AftterEvent, omdat er geen gebeurtenis zal zijn.

In deel 4, dat de normale werkingscode, maar merk op dat wat u zou denken niet zal werken. De hond verklaart het bijvoorbeeld niet met de naam "FIDO", maar "COCO". De hond zegt niet "MEOW", maar "Worth". En wanneer u de naam van de hond later wilt zien, zult u merken dat het "anders" is, en niet "COCO". Al deze overrides werden gepresenteerd in deel 3.

Dus hoe werkt het? Nou, laat ze EVAL () uitsluiten (die iedereen "kwaad" zegt) en uitsluiten dat dit niet het waarnemerspatroon is. Zo is de manier waarop het werkt, een verborgen lege klasse genaamd Pluggable, die geen methoden en eigenschappen bevat die door de hondenklasse worden gebruikt. Dus, omdat dit gebeurt, zullen de magische methoden voor ons worden betrokken. Daarom communiceren we in delen 3 en 4 met het object dat is verkregen uit de klassenpluggen, en niet met de hondenklasse zelf. In plaats daarvan staan \u200b\u200bwe de pluginklasse toe "aanraken" het hondobject voor ons. (Als dit een soort ontwerp is dat ik het niet weet - laat het me weten.)

De methode van haak en luisteraar wordt het meest gebruikt, maar er zijn andere dingen die u kunt doen. Afhankelijk van de grootte van uw aanvraag en wie de code wil zien (het is een foss-script, of iets in het huis) zal aanzienlijk beïnvloeden hoe u de plug-ins wilt oplossen.

kdeloach heeft een aangenaam voorbeeld, maar de implementatie- en haakfunctie zijn een beetje onveilig. Ik zou u vragen om meer informatie te geven over het karakter van PHP-applicaties voor uw brief, en hoe u plug-ins ziet.

1 tot kdeloach van mij.

Hier is een aanpak die ik heb gebruikt, is een poging om te kopiëren van de QT-signalen / slots uit het QT-mechanisme, een soort waarnemersjabloon. Objecten kunnen signalen uitzenden. Elk signaal heeft een identificatie in het systeem - het bestaat uit een ID-ID + -object-afzender. Elk signaal kan worden vastgebonden aan ontvanger, die eenvoudig "wordt genoemd", u gebruikt de bandklasse om signalen te verzenden naar iedereen die geïnteresseerd is in het wanneer er iets gebeurt, stuur je een signaal. Hieronder is een voorbeeld en een voorbeeld van implementatie.

log in (); ?\u003e

Ik geloof dat de gemakkelijkste manier is om het advies van Jeff te volgen en naar de bestaande code te kijken. Probeer WordPress, Drupal, Joomla en andere beroemde php-CMS te zien om te zien wat hun API-interfaces eruit zien en voelen. Dus je kunt zelfs de ideeën krijgen die je misschien niet eerder hebt gedacht om dingen een beetje diker te maken.

Een meer directe reactie zou zijn om gemeenschappelijke bestanden te schrijven die ze zouden worden opgenomen in het opnemen van het bestand om gebruiksgemak te bieden. Het zal worden onderverdeeld in categorieën en wordt niet in hetzelfde "hooks.php" massieve bestand geleverd. Wees voorzichtig, want wat eindigt is dat de bestanden die ze opnemen uiteindelijk steeds meer afhankelijkheden en functionaliteit hebben. Probeer de Addance API te beperken. I.E Minder bestanden voor hun opname.

Er is een nette project genaamd