Slik lager du en pakket tilleggsplugin for WordPress

Å holde funksjonalitet skilt fra presentasjon er en WordPress tema utvikling beste praksis. I dette innlegget lærer du hvordan du gjør nettopp det, og gir brukerne et pakket plugin som er unikt for temaene dine.

Temautvikling Logikk

Vi har solgt WordPress-temaer på ThemeForest i over fire år, og i løpet av denne tiden har vi lært mange ting som har hjulpet oss med å lykkes i markedet. En av de viktigste aspektene ved vellykket temautvikling er "riktig temautviklingslogikk". 

Nøkkelen til å skille utviklingslogikk er produksjonshastighet: jo raskere kan du opprette kvalitetstemaer, desto mer inntekt kan du generere. Å holde funksjonalitet i et eget plugg er også nyttig når det gjelder oppdateringer. Tenk deg at du har ti temaer på ThemeForest, og du vil legge til ny funksjonalitet som en oppdatering. Å ha all funksjonalitet i en enkelt plugin betyr at du bare trenger å oppdatere den en gang over bordet, ellers blir en liten oppdatering sakte og potensielt smertefull.

Så hvis du vil lage kraftige temaer og tjene mer penger gjør det, respekter WordPress 'plugin og tema system.

Funksjonstype

Hva slags funksjonalitet kan det være et premium tema? Hva slags ting skal vi trekke inn i et eget plugin? Her er en liste over nøkkelkomponenter som vi vanligvis holder adskilt fra temafiler:

  • Temaalternativerpanel
  • Side / Legg ut utvidede egendefinerte felt
  • Egendefinerte widgets
  • Tilpassede kortkoder
  • Egendefinerte innleggstyper
  • Tilpassede ekstrafunksjoner

I dette innlegget vil vi ikke detaljere hvordan du lager komponentene selv, men vi vil forklare hvordan du skal pakke dem alle sammen i en addons-plugin. 

La oss begynne

Gå til din wp-innhold> plugins og lag en tom mappe med navnet på det pakkede pluginet. Vi anbefaler at du bruker et selvforklarende navn. For eksempel kalles vår addons-plugin "ninzio-addons" (Ninzio er navnet på vårt firma). 

Viktig: Ikke bruk et understreke i mappenavnet! Bruk et dash hvis nødvendig.

Deretter oppretter du en php-fil med samme navn som mappen din i den plugin-mappen. I vårt eksempel vil det være "ninzio-addons.php". Igjen, ingen understreker takk. Åpne den filen og legg til følgende DocBlock header kommentar:

/ ** * Plugin Name: Ditt pluginnavn * Plugin URI: din plugin-url * Tekstdomen: tekstdomener * Domenevei: / språk / * Beskrivelse: Kort beskrivelse av plugin-en * Forfatter: Forfatternavn * Versjon: 1.0.0 * Forfatter URI: Forfatter uri * /

La oss undersøke detaljene vi la til her: 

  • Plugin navn: dette bør være kort og beskrivende. 
  • Plugin URI: Du kan lime inn webadressen din her. 
  • Tekstdomen: Dette er en veldig viktig parameter. Du bør navngi det på samme måte som din plugin-mappe og hovedfil. Med tekstdomenet kan du og dine brukere oversette plugin-strenger. Senere vil vi se på hvordan du oversetter et pakket tilleggsprogram (vi finner dette er svært viktig for våre kunder). 
  • Domain Path: Denne parameteren er også veldig viktig for plugin-oversettelse. Domenestien er i forhold til språkfilmappen. Gå til din addons-plugin-mappe og opprett en tom mappe med navnet "languages". For nå la det være tomt; senere vil vi opprette språkfilen. 
  • Alle andre parametere "Forfatter", "Versjon", "Forfatter URI" er rimelig selvforklarende.

Nå, etter å ha opprettet vår addons-plugin-mappe og hovedfilen, er det på tide å konfigurere pluginet vårt.

konfigurasjon

I hovedinnstillingsfilen, etter headerkommentaren, limer du inn denne utsnittet:

hvis (! definert ('ABSPATH')) exit; // Avslutt hvis tilgjengelig direkte

Dette er av sikkerhetsgrunner; den blokkerer direkte tilgang til pluginfilen.

Lige etter det, legg til denne koden:

fungere your_addons_load_plugin_textdomain () load_plugin_textdomain ('ninzio-addons', falsk, dirname (plugin_basename (__ FILE__)) '/ languages ​​/');  add_action ('plugins_loaded', 'your_addons_load_plugin_textdomain');

Her laster vi inn plugin-tekstdomenen-sørg for at funksjonsnavnet er riktig. Vår anbefaling for navngivningsfunksjoner er å bruke selvbeskrivende navn med et prefiks av pluginet ditt. For eksempel ninzio_addons. Og siden dette er en php-funksjon, kan vi bruke understrekninger i stedet for bindestreker. 

Pass på at du er nøyaktig når du kopierer eller skriver inn load_plugin_textdomain-funksjonen. For domeneparameteren skriv inn det eksakte tekstdomenet som vi definerte tidligere. Og for parameteren Plugin Relative Path, angi banen til språkmappen som vi opprettet tidligere.

Plugin Directory Path

La oss nå definere vår plugin-katalogbane; legg til denne koden:

define ('your_addons', plugin_dir_path (__FILE__));

Her bruker vi your_addons som plugin-katalogbane. Så langt så bra; Vi har laget vårt plugin, nå er det på tide å fylle det med tilpasset funksjonalitet.

Temaalternativer Panel

Vi vil ikke bruke dette trinnet til å dekke hvordan du oppretter et valgpanel for et tema - du kan opprette en egendefinert, eller gjøre som vi gjør; bruk et rammeverk for rammeprogrammer som ikke er tilgjengelig på skjermen. Hvis du er ny på valgpanelrammer, anbefaler vi at du leser Bonang Salemane artikler om Redux Framework-temaintegrasjon:

  • Komme i gang med Redux Framework: Introdusere det og integrere det i temaet ditt

    De fleste veldesignede WordPress-temaene tillater sideadministratorer å finjustere bestemte aspekter av temaet gjennom en opsjonsside. Prosessen med å opprette en opsjonsside ...
    Bonang Salemane
    WordPress

Hvis du vil legge til et temaalternativerpanel for dine tillegg, kopierer du alternativpanelmappen, i sin helhet, til addons-pluginmappen. Nå må vi kreve flere filer for å aktivere det:

hvis (! class_exists ('ReduxFramework') && file_exists (your_addons. '/optionpanel/framework.php')) require_once ('optionspanel / framework.php');  hvis (! isset ($ redux_demo) && file_exists (your_addons. '/optionpanel/config.php')) require_once ('optionpanel / config.php'); 

I denne kodesekvensen krevde vi reduxframework to hovedfiler: framework.php-filen som administrerer opsjonspanelfunksjonaliteten, og config, php-filen som er ansvarlig for opsjonspanelkonfigurasjoner. Våre valgpanelfiler er plassert i en "optionspanel" -mappe plassert i ninzio-addons plugin-mappen. Ferdig.

Egendefinerte funksjoner

Det er på tide at vi inkluderte noen tilpassede funksjoner. Opprett en fil i tilleggspluginmappen, og nevner den noe som "addons-functons.php". Sett alle dine tilpassede funksjoner i denne filen. 

En ting å se på er at du bruker riktig funksjon navngi konvensjoner. Bruk beskrivende funksjonsnavn med et unikt prefiks. For eksempel:

fungere your_addons_profile_social_links () ...

Rett etter temarammafilene krever du din egendefinerte funksjonsfil:

require_once ('includes / addons-functions.php');

Egendefinerte Widgets

Og nå, ta med noen egendefinerte widgets. Opprett en mappe med navnet "widgets" i tilleggs-plugin-mappen, sett alle dine egendefinerte widgets-filer i den mappen. Egendefinert widgets filnavn er ikke kritisk her, men det anbefales at du bruker prefikser og bindestreker, ikke understreker.

For eksempel heter vår tilpassede Twitter-widgetfil "ninzio-recent-tweets.php". På samme måte blir vår Mailchimp-widget kalt "ninzio-mailchimp.php". La oss inkludere dem slik:

require_once ('widgets / ninzio-recent-tweets.php'); require_once ('widgets / ninzio-mailchimp.php');

Igjen, vi vil ikke dekke de faktiske tilpassede widgets etableringsprosessen; for det, sjekk ut Bonang Salemane innlegg:

  • Opprette dine egne widgets ved hjelp av ulike WordPress APIer: Introduksjon

    Widgets er en fin måte å gi nettstedseierne litt kontroll over utseendet (og noen ganger funksjonaliteten) av deres WordPress-nettsteder. I denne serien går vi ...
    Bonang Salemane
    WordPress Widgets

Egendefinerte innleggstyper og taksonomier

Hvis du vil legge til en portefølje eller hendelser eller noe som ligner på WordPress 'vanlige innlegg, men må skilles fra temaet, bør du bruke egendefinerte innleggstyper. Alle våre temaer har tilpassede posttyper inkludert. Å lage egendefinerte innleggstyper kan være komplisert, så det igjen faller utenfor omfanget av denne opplæringen, men jeg anbefaler at du leser Tom McFarlin's:

  • Rask Tips: Posttyper, Taxonomier og Permalinks

    Egendefinerte innleggstyper og taksonomier er to kraftige funksjoner i WordPress. Dessverre kan de ha en tendens til å forårsake problemer hvis utviklere ikke er ...
    Tom McFarlin
    WordPress

For egendefinerte innleggstyper bør du opprette en egen mappe inne i tilleggsprogrammet, for eksempel "ninzio-prosjekter". Og i den mappen plasserer du alle filene dine som er relatert til dine egendefinerte innleggstyper. De viktigste filene her er hovedfilene som lager de egendefinerte innleggstyper, enkeltpostfilen og loop / arkivpostfilen. Navngi hovedfilen til egendefinert posttype ettersom du har kalt mappen for tilpasset posttype, for eksempel "ninzio-projects.php". Sett inn din egendefinerte innleggskode i den filen, og for å aktivere egendefinert innleggstype må du kreve hovedfilen:

require_once ('ninzio-prosjekter / ninzio-projects.php');

Når du skiller funksjonalitet som dette, bør du alltid vurdere kundene dine - mer presist, hvordan de kan utvide / skrive om dine tilpassede posttype malfiler (arkiv og enkelt). La oss anta at vårt egendefinerte innleggstypenavn er "prosjekter". Den enkelte egendefinerte posttypefilen skal kalles "single-projects.php" og loop / arkivfilen skal kalles "archive-projects.php". 

Og hvis din egendefinerte innleggstype også har egendefinerte taksonomier, bør du opprette en egen fil for dem også. La oss ringe vår taksonomi fil "taxonomy-projects.php". Så nå har vi tre filer:

single-projects.php arkiv-projects.php taxonomy-projects.php

La oss få dem til å skrives på nytt. Legg til disse tre funksjonene til hovedaddonsjonsfilen din:

fungere your_addons_projects_single_template ($ single_template) global $ post; hvis ($ post-> post_type == 'prosjekter') if ($ theme_file = locate_template (array ('single-projects.php'))) $ single_template = $ theme_file;  ellers $ single_template = your_addons. 'Prosjekter / enkelt projects.php';  returnere $ single_template;  add_filter ("single_template", "your_addons_projects_single_template", 20);


fungere your_addons_projects_archive_template ($ archive_template) global $ post; hvis ($ post-> post_type == 'prosjekter') if ($ theme_file = locate_template (array ('archive-projects.php'))) $ archive_template = $ theme_file;  ellers $ archive_template = your_addons. 'Prosjekter / arkiv-projects.php';  returnere $ archive_template;  add_filter ("archive_template", "your_addons_projects_archive_template", 20);


fungere your_addons_projects_taxonomy_template ($ taxonomy_template) if (is_tax ('projects-category')) if ($ theme_file = locate_template (array ('taxonomy-projects.php'))) $ taxonomy_template = $ theme_file;  ellers $ taxonomy_template = your_addons. 'Prosjekter / taksonomi-projects.php';  returnere $ taxonomy_template;  add_filter ("taxonomy_template", "your_addons_projects_taxonomy_template", 20);

Endre navnet på disse funksjonene for å få ditt unike prefiks. Hovedlogikken her er å laste malfiler av den egendefinerte innleggstypen etter å ha sjekket om en kopi av den er til stede i temapappen. Når klienten kopierer den tilpassede posttypemalen til temaet og strekker eller overskriver den, legger tilleggsplugin din inn i klientens versjon av den egendefinerte innleggstypen. Så i denne situasjonen dine kjernefiler i tilleggsprogrammet ikke endres, de er bare forlenget av klienten din. Eventuelle fremtidige oppdateringer av tilleggsprogrammet ditt vil ikke slette klientens egendefinerte modifikasjoner.

Egendefinerte skript, stiler og snarveier

For tilpassede skript og stiler anbefaler vi at du oppretter separate mapper og enqueue filene som du vil i temaets "functions.php" -fil.

Hvis du planlegger å legge til egendefinerte kortkoder, må du opprette og inkludere kortkodefilen din i tilleggsmappen din. Opprett en mappe med navnet "kortkoder" og i den mappen opprett filen "yourprefix-shortcodes.php" (i vårt tilfelle: "ninzio-shortcodes.php"). I filen "-shortcodes.php" bør du sette alle dine egendefinerte kortnummerkode. 

Som du har samlet inn nå, vil vi ikke bruke denne opplæringen til å dekke de tilpassede kortkodes etableringsprosessen, men jeg anbefaler at du leser Siddharths opplæring:

  • WordPress-kortkoder: Den riktige måten

    En av de viktigste årsakene til at WordPress er den mest populære CMS-plattformen er det rene nivået av tilpassbarhet som det bringer til bordet. I dag,…
    Siddharth
    Temautvikling

La oss ta med vår egendefinerte kortkodesfil:

require_once ('shortcodes / ninzio-shortcodes.php');

språk

Vi er nesten ferdige med tilleggsprogrammet. Etter at du har testet all din tilpassede funksjonalitet, er det på tide å lage språkfilen for å gjøre pluginet ditt oversettbart. 

Gå til addons plugin-mappe> språk. Bruk PoEdit-programvaren (PoEdit er et gratis program, tilgjengelig for Mac, Windows og Linux.) For å generere språkfilen. Igjen, vær veldig nøyaktig med filnavnet; De resulterende filene skal oppgi nøyaktig som tilleggspluginemappen. For eksempel er pluginnavnet vårt "ninzio-addons", språkfilen skal være "ninzio-addons.pot". Dette er hovedspråksfilen som inneholder alle strengene i tekstdomenet ditt. Fra denne filen kan du opprette andre språkfiler. 

For å oversette addons-plugin-språkfilen din:

  1. Start opp Poedit.
  2. I Poedit går til Fil> Ny fra POT / PO-fil ...
  3. Velg og Åpne pottfilen fra språkmappen.
  4. Skriv inn ditt navn, e-postadresse, språk og land (dvs. fransk fr_FR, tysk de_DE).
  5. Klikk på Oppdater knappen i hovedpoenget brukergrensesnitt.
  6. Lagre filen, kalt "filnavn-xx_XX.po" med "xx_XX" for ditt språk og land.
  7. Det er det!

Konklusjon

Nå er pluginet ditt klart, godt gjort! Vi har trukket all nødvendig funksjonalitet bort fra våre presentasjonsfiler, og gitt et pakket plugin som vi kan oppdatere på tvers av flere temaer. 

Jeg håper du likte å følge med, ikke glem at du kan gaffle den pakkede addons-plugin-prøven på Github og bruke den som utgangspunkt.