Å 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.
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.
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:
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.
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:
Nå, etter å ha opprettet vår addons-plugin-mappe og hovedfilen, er det på tide å konfigurere pluginet vårt.
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.
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.
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:
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.
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');
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:
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:
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.
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:
La oss ta med vår egendefinerte kortkodesfil:
require_once ('shortcodes / ninzio-shortcodes.php');
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:
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.