Så här skapar du en packad tilläggsplugin för WordPress

Att hålla funktionaliteten skild från presentationen är en WordPress-temautvecklings bästa praxis. I det här inlägget lär du dig att göra just det, så att dina användare får ett komplett plugin som är unikt för dina teman.

Temautvecklingslogik

Vi har sålt WordPress-teman på ThemeForest i över fyra år, och under den här tiden har vi lärt oss många saker som har hjälpt oss att lyckas på marknaden. En av de viktigaste aspekterna av framgångsrik temat utveckling är "rätt temat utvecklingslogik". 

Den viktigaste fördelen med att skilja utvecklingslogik är produktionshastigheten: Ju snabbare du kan skapa kvalitetstema, desto mer inkomst kan du generera. Att hålla funktionen i ett separat plugin är också till hjälp när det gäller uppdateringar. Tänk dig att du har tio teman på ThemeForest och du vill lägga till ny funktionalitet som en uppdatering. Med all din funktionalitet i ett enda plugin behöver du bara uppdatera det en gång över hela linjen, annars blir en liten uppdatering långsam och potentiellt smärtsam.

Så om du vill skapa kraftfulla teman och tjäna mer pengar gör du det, respektera WordPress plugin och temasystem.

Funktionalitetstyper

Vilken typ av funktionalitet kan ett premiumtema innehålla? Vilka saker borde vi dra i ett separat plugin? Här är en lista över nyckelkomponenter som vi vanligtvis håller åtskilda från temafiler:

  • Temaalternativspanel
  • Sida / Skriv ut utökade anpassade fält
  • Anpassade widgets
  • Anpassade kortnummer
  • Anpassade posttyper
  • Anpassade extrafunktioner

I det här inlägget kommer vi inte att beskriva hur man skapar komponenterna själva, men vi kommer att förklara hur de ska packas in i ett tilläggs plugin. 

Låt oss börja

Gå till din wp-innehåll> plugins och skapa en tom mapp med namnet på ditt packade plugin. Vi rekommenderar att du använder ett självförklarande namn. Till exempel heter vår addons-plugin "ninzio-addons" (Ninzio är namnet på vårt företag). 

Viktig: Använd inte ett understreck i mappnamnet! Använd ett streck om det behövs.

Därefter skapar du en php-fil med samma namn som din mapp i den plugin-mappen. I vårt exempel skulle det vara "ninzio-addons.php". Återigen, inga underskrifter tack. Öppna den filen och lägg till följande DocBlock header-kommentar:

/ ** * Plugin Name: Ditt plugin namn * Plugin URI: Din plugin URL * Text Domän: Text-Domän * Domänväg: / språk / * Beskrivning: Kort beskrivning av plugin * Författare: Författarnamn * Version: 1.0.0 * Författare URI: författare uri * /

Låt oss undersöka de detaljer som vi lagt till här: 

  • Pluginnamn: Detta ska vara kortfattat och beskrivande. 
  • Plugin URI: Du kan klistra in din webbadress här. 
  • Text Domän: Det här är en mycket viktig parameter. Du ska namnge det på samma sätt som din plugin-mapp och huvudfilen. Med textdomänen kan du och dina användare översätta pluginsträngar. Senare kommer vi att titta på hur man översätter ett komplett tilläggs plugin (vi finner att detta är mycket viktigt för våra kunder). 
  • Domänväg: Denna parameter är också mycket viktig för plugin-översättning. Domänväggen är i förhållande till språkfilmappen. Gå till din addons-pluginmapp och skapa en tom mapp med namnet "languages". För nu lämna det tomt; senare kommer vi att skapa språkfilen. 
  • Alla andra parametrar "Författare", "Version", "Författare URI" är rimligen självförklarande.

Nu har vi skapat vår addons plugin mapp och huvudfilen är det dags att konfigurera vårt plugin.

Konfiguration

I huvudinställningsfilen, efter rubrikkommentaren, klistra in det här stycket:

om (! definierat ('ABSPATH')) exit; // Avsluta om det är tillgängligt direkt

Detta är av säkerhetsskäl det blockerar direkt åtkomst till pluginfilen.

Strax efter det, lägg till den här koden:

funktion your_addons_load_plugin_textdomain () load_plugin_textdomain ('ninzio-addons', false, dirname (plugin_basename (__ FILE__)). '/ languages ​​/');  add_action ('plugins_loaded', 'your_addons_load_plugin_textdomain');

Här laddar vi in ​​vår textinställningar för plugin-se till att funktionsnamnet är korrekt. Vår rekommendation för namngivningsfunktioner är att använda självbeskrivande namn med ett prefix av ditt plugin. Till exempel ninzio_addons. Och eftersom det här är en php-funktion, kan vi använda understreck istället för bindestreck. 

Se till att du är korrekt när du kopierar eller skriver in load_plugin_textdomain-funktionen. För domänparametern anger du den exakta textdomänen som vi definierade tidigare. Och för parametern Plugin-relativ sökväg anger du sökvägen till den språkmapp som vi skapade tidigare.

Plugin Directory Path

Låt oss nu definiera vår plugin directory path; lägg till den här koden:

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

Här använder vi your_addons som plugin directory path. Än så länge är allt bra; Vi har vårt plugin skapat, nu är det dags att fylla det med anpassad funktionalitet.

Tema Alternativ Panel

Vi kommer inte att använda det här steget för att täcka hur man skapar en alternativpanel för ett tema. Du kan skapa en anpassad eller göra som vi gör. Använd en ram för ramalternativet på platsen. Om du är ny på alternativpanelramar rekommenderar vi att du läser Bonang Salemanes artiklar om Redux Framework-temat integration:

  • Komma igång med Redux Framework: presentera det och integrera det i ditt tema

    De flesta väl utformade WordPress-teman tillåter webbplatsadministratörer att tweak vissa aspekter av temat genom en options sida. Processen med att skapa en options sida ...
    Bonang Salemane
    Wordpress

För att lägga till en temaalternativspanel till dina tillägg kopiera alternativpanelmappen, helt och hållet, till tilläggspluginmappen. Nu måste vi kräva flera filer för att aktivera det:

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

I det här kodbiten krävde vi redxframework två huvudfiler: framework.php-filen som hanterar alternativpanelfunktionaliteten och config, php-filen som är ansvarig för alternativpanelkonfigurationer. Våra alternativpanelfiler finns i en "optionspanel" -mapp placerad i plugin-mappen för ninzio-addons. Gjort.

Anpassade funktioner

Det är dags att vi inkluderade några anpassade funktioner. Skapa en fil i din addons-plugin-mapp, och namnge den något som "addons-functons.php". Lägg alla dina anpassade funktioner i den här filen. 

En sak att titta på är att du använder rätt namngivningskonventioner. Använd beskrivande funktionsnamn med ett unikt prefix. Till exempel:

funktion your_addons_profile_social_links () ...

Strax efter tema ramfilerna, kräver din anpassade funktioner fil:

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

Anpassade widgets

Och nu, inkludera några anpassade widgets. Skapa en mapp med namnet "widgets" i din addons plugin-mapp, lägg alla dina anpassade widgets-filer i den mappen. Filnamn för anpassade widgets är inte kritisk här, men det rekommenderas att du använder prefix och bindestreck, inte understryker.

Till exempel heter vår anpassade Twitter-widgetfil "ninzio-recent-tweets.php". På samma sätt heter vår Mailchimp-widget "ninzio-mailchimp.php". Låt oss inkludera dem som så:

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

Återigen kommer vi inte att täcka den faktiska anpassade widgets skapande processen; för det, kolla Bonang Salemane stolpe:

  • Skapa egna widgets Använda olika WordPress-API: Introduktion

    Widgetar är ett snyggt sätt att ge webbplatsägare viss kontroll över utseendet (och ibland funktionaliteten) av deras WordPress-webbplatser. I denna serie går vi ...
    Bonang Salemane
    WordPress Widgets

Anpassade posttyper och taxonomier

Om du vill lägga till en portfölj eller händelser eller något som liknar WordPress ordinarie inlägg men måste separeras från temat, ska du använda egna posttyper. Alla våra teman har egna posttyper inkluderade. Att skapa anpassade posttyper kan vara komplexa, så återigen faller det utanför handledningen, men jag rekommenderar att du läser Tom McFarlin:

  • Snabbtips: Posttyper, taxonomier och Permalinks

    Anpassade inläggstyper och taxonomier är två kraftfulla funktioner i WordPress. Tyvärr kan de ha en tendens att orsaka problem om utvecklare inte är ...
    Tom McFarlin
    Wordpress

För anpassade posttyper ska du skapa en separat mapp i ditt addons-plugin, till exempel "ninzio-projekt". Och inuti den mappen placera alla dina filer som är relaterade till dina egna posttyper. De viktigaste filerna här är huvudfilerna som skapar anpassade posttyper, den enda postfilen och loop / arkivpostfilen. Namnge din huvudfil för anpassad posttyp som du har namngett din mapp för anpassad posttyp, till exempel "ninzio-projects.php". Sätt in din anpassade posttypskod i den filen, och för att aktivera din anpassade posttyp måste du kräva huvudfilen:

require_once ("ninzio-projekt / ninzio-projects.php");

När du skiljer funktionalitet som denna, bör du alltid överväga dina kunder - närmare bestämt, hur de kan förlänga / skriva om dina anpassade inläggstypmallfiler (arkiv och singel). Låt oss anta att vårt anpassade posttypsnamn är "projekt". Den enskilda anpassade posttypfilen ska kallas "single-projects.php" och loop / arkivfilen ska kallas "archive-projects.php". 

Och om din anpassade posttyp också har egna taxonomier ska du skapa en separat fil för dem också. Låt oss ringa vår taxonomi fil "taxonomy-projects.php". Så nu har vi tre filer:

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

Låt oss göra dem omskrivbara. Lägg till dessa tre funktioner till din huvudsakliga addons-fil:

funktion your_addons_projects_single_template ($ single_template) global $ post; om ($ post-> post_type == 'projekt') if ($ theme_file = locate_template (array ('single-projects.php'))) $ single_template = $ theme_file;  annat $ single_template = your_addons. 'Projekt / single-projects.php';  returnera $ single_template;  add_filter ("single_template", "your_addons_projects_single_template", 20);


funktion your_addons_projects_archive_template ($ archive_template) global $ post; om ($ post-> post_type == 'projekt') if ($ theme_file = locate_template (array ('archive-projects.php'))) $ archive_template = $ theme_file;  annat $ archive_template = your_addons. 'Projekt / arkiv-projects.php';  returnera $ archive_template;  add_filter ("archive_template", "your_addons_projects_archive_template", 20);


funktion 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;  annat $ taxonomy_template = your_addons. 'Projekt / taxonomi-projects.php';  returnera $ taxonomy_template;  add_filter ("taxonomy_template", "your_addons_projects_taxonomy_template", 20);

Ändra namnet på dessa funktioner för att få ditt unika prefix. Huvudlogiken här är att ladda mallfilerna i den anpassade posttypen efter att ha kontrollerat om en kopia av den är närvarande i temapappen. När din klient kopierar anpassad posttypmall till temat och utökar eller skriver över det, lägger det till din klientversion av den anpassade inläggstypfilen. Så i denna situation ändras inte dina kärnfiler i plugin-tillägget, de är bara förlängas av din klient. Eventuella framtida uppdateringar av ditt addons-plugin tar inte bort klientens anpassade ändringar.

Anpassade skript, stilar och kortnummer

För anpassade skript och format rekommenderar vi att du skapar separata mappar och gör det enklare för filerna som du vill i ditt temas "functions.php" -fil.

Om du planerar att lägga till egna kortkoder måste du skapa och inkludera dina kortkoder i din addons-mapp. Skapa en mapp med namnet "kortkoder" och inuti den mappen skapa filen "yourprefix-shortcodes.php" (i vårt fall: "ninzio-shortcodes.php"). I filen "-shortcodes.php" ska du sätta alla dina egna kortnummer. 

Som du har samlat nu, kommer vi inte att använda den här handledningen för att täcka de anpassade kortkodstillverkningsprocessen, men jag rekommenderar att du läser Siddharths handledning:

  • WordPress-kortkoder: Det rätta sättet

    En av de främsta anledningarna till att WordPress är den mest populära CMS-plattformen är den rena anpassningsbarheten som den tar med sig till bordet. I dag,…
    Siddharth
    Temautveckling

Låt oss inkludera vår anpassade kortkoderfil:

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

språk

Vi är nästan färdiga med addons-plugin. När du har testat all din anpassade funktionalitet är det dags att skapa språkfilen för att göra ditt plugin översättningsbart. 

Gå till addons plugin mapp> språk. Använd PoEdit-programvaran (PoEdit är en gratis applikation, tillgänglig för Mac, Windows och Linux.) För att skapa språkfilen. Återigen, var väldigt noggrann med filnamn; De resulterande filerna bör namnges exakt som din addons plugin mapp. Till exempel är vårt plugin namn "ninzio-addons", språkfilen ska vara "ninzio-addons.pot". Detta är huvudspråksfilen som innehåller alla strängar i din textdomän. Från den här filen kan du skapa andra språkfiler. 

För att översätta din addons plugin språkfil:

  1. Starta upp Poedit.
  2. I Poedit gå till Fil> Ny från POT / PO-fil ...
  3. Välj och Öppna pottfilen i språkmappen.
  4. Ange ditt namn, e-postadress, ditt språk och land (dvs. franska fr_FR, tyska de_DE).
  5. Klicka på Uppdatering knappen i huvud Poedit-gränssnittet.
  6. Spara filen, som heter "filnamn-xx_XX.po" med "xx_XX" för ditt språk och land.
  7. Det är allt!

Slutsats

Nu är din plugin redo, bra gjort! Vi har dragit all nödvändig funktionalitet bort från våra presentationsfiler och tillhandahållit ett komplett plugin som vi kan uppdatera över flera teman. 

Jag hoppas att du njöt av att följa med, glöm inte att du kan gaffla det packade addons-pluginprovet på Github och använda det som utgångspunkt.