När du fortsätter skriva för WordPress mer och mer, kommer svårighetsgraden och komplexiteten i dina plugins till slut att nå långt utöver den enkla back-end dataprofileringen, vilket visas i vår nybörjareartikel. I denna avdelning kommer vi att täcka djupgående: databasinteraktion, Admin Widgets och Sidebar Widgets. Dagens exempel kommer att vara ett anpassat inbyggt plugin för "Mest populära genom visningar", vilket skapar en widget för admin-område för att vi ska visa och en sidebar-widget för besökare att se.
Innan vi öppnar vår IDE eller skriver någon kod, bör du alltid skriva ut en lista över vilka funktioner din plugin kommer och inte kommer att ha (åtminstone i sin inledande fas kan du alltid förlänga senare). För vårt plugin, "Mest populära av visningar", är vår primära funktion att visa en lista över de mest populära inläggen (vi säger topp 10). För det andra lägger vi också listan i adminområdet som en slags lågteknologisk analys. Slutligen ger vi utvecklarna möjlighet att visa det överallt genom att göra det tillgängligt som en sidobar-widget och via en enkel funktion.
Innan vi kan visa de mest populära inläggen behöver vi samla in data om vilka inlägg som ses och hur ofta men vi behöver någonting för att sätta all den informationen, även innan vi kan göra det. Inne i en ny plugin-fil, låt oss skapa en ny funktion (ppbv_create_table) som kommer att kontrollera om vårt bord finns. Om det inte gör det kommer vi att skapa det. Vår metod att göra detta är ganska enkel; vi använder $ wpdb-> get_results för att köra ett SQL-uttalande som kontrollerar ett bord som heter "wp_popular_by_views." Om den inte hittar tabellen kommer get_results returnera null. Om så är fallet använder vi $ wpdb-> förfrågan för att skriva i den nya tabellen. Vi kör denna funktion varje gång plugin är aktiverad.
prefix.'popular_by_views'; // kombinera prefixet med vår tabellenamn funktion ppbv_create_table () global $ wpdb, $ ppbv_tablename; // ring globalt så vi kan använda dem inom funktionen $ ppbv_table = $ wpdb-> get_results ("SHOW TABLES LIKE" $ ppbv_tablename "", ARRAY_N); // returnerar null om inga resultat om (is_null ($ ppbv_table)) // om vi inte har ett bord $ create_table_sql = "CREATE TABLE $ ppbv_tablename (id BIGINT (50) INTE NULL AUTO_INCREMENT, post_id VARCHAR ) INTE NULL, visningar BIGINT (50) INTE NULL, PRIMÄR KEY (id), UNIQUE (id)); "; // var försiktig med SQL-syntaxen, det kan vara mycket finiky $ wpdb-> query ($ create_table_sql); // köra SQL-satsen i databasen register_activation_hook (__ FIL __, 'ppbv_create_table'); // köra funktionen 'ppbv_create_table' vid pluginaktivering?>
Det nästa vi behöver göra, nu när vi har ett bord för att lagra våra data, är att fånga våra data. Vi skapar en ny funktion (ppbv_page_viewed) som vi bifogar till wp_head krok så att den löper på varje sidlast. Inom den här funktionen kommer vi att göra en av två saker, efter att vi har kontrollerat om den aktuella sidan redan finns i databasen: öka dess åsikter med en eller, om den inte finns i databasen, lägg till den i databasen. För att ta reda på om den aktuella sidan redan finns i databasen kommer vi att använda $ post föremål för att få "post_ID". Detta steg är faktiskt väldigt enkelt, eftersom vi inte samlar in några komplicerade data. kommentarerna i koden ger en detaljerad steg för steg i denna process.
funktionen ppbv_page_viewed () if (is_single () &&! is_page ()) // bara kör på inlägg och inte sidor globalt $ wpdb, $ post, $ ppbv_tablename; // ring globalt för användning i funciton $ wpdb-> flush (); // clense DB-gränssnittet $ data = $ wpdb-> get_row ("VÄLJ * FRÅN $ ppbv_tablename WHERE post_id =" $ post-> ID "", ARRAY_A); // Hämta data raden som har matchande post-ID om (! is_null ($ data)) // om vi har en matchande datarradie $ new_views = $ data ['views'] + 1; // öka vyerna med 1 $ wpdb-> fråga ("UPDATE $ ppbv_tablename SET views =" $ new_views "WHERE post_id =" $ post-> ID ";"); // uppdatera datarraden med de nya vyerna $ wpdb-> flush (); // clense DB-gränssnittet annars // om vi inte har en matchande datarad (ingen har sett inlägget ännu) $ wpdb-> query ("INSERT INTO $ ppbv_tablename (post_id, views) VALUES (' $ post-> ID', '1'); "); // lägg till en ny data rad i DB med post-ID och 1 visa $ wpdb-> flush (); // clense DB-gränssnittet add_action ('wp_head', 'ppbv_page_viewed'); // bifoga ppbv_page_viewed till wp_head-kroken
Därefter kommer vi att använda den här informationen som vi just lagt till i vår databas för att skapa en beställd lista inuti en widget för Admin-området Dashboard. Denna process innefattar två funktioner: den första (ppbv_admin_widget) för att generera allt inne i widgeten och för det andra (ppbv_add_admin_widget) för att skapa widgeten själv. Låt oss börja med innehållsfunktionen, pppbv_admin_widget. För det första, sedan vi gör en beställd lista, låt oss echo ut öppningsetiketterna för det. Då globaliserar vi $ wpdb och $ ppbv_tablename vars så vi kan komma åt databasen och hämta de tio mest visade inläggets ID-er. Då kör vi den returnerade matrisen genom en för varje uttalande och använd varje enskild ID för att bygga ett listobjekt och skapa en länk till den sidan samtidigt som du skriver ut sina åsikter (formaterad med number_format för att underlätta läsningen).
funktionen ppbv_admin_widget () echo ""; // skapa en oorderad lista global $ wpdb, $ ppbv_tablename; // globalt för användning i funktion $ popular = $ wpdb-> get_results (" VÄLJ * FRÅN $ ppbv_tablename ORDER BY visningar DESC LIMIT 0,10 " ARRAY_N); // Beställ vårt bord med största till minsta antal visningar och få de första 10 (dvs de 10 mest visade) föreachen ($ populär som $ post) // gå igenom den återställda uppsättningen populära inlägg $ ID = $ inlägg [1]; // lagra data i en variabel för att spara några tecken och behåll koden renare $ views = number_format ($ post [2]); // number_format lägger till kommatecken i rätt fläckar för nummer (ex: 12543 till 12.543) $ post_url = get_permalink ($ ID); // få URL för det aktuella inlägget i loop $ title = get_the_title ($ ID); // få titeln på det aktuella inlägget i loop echo "
"; // stäng ut den oordnade listan- $ title - $ views visningar
"; // echo ut informationen i ett listobjekt // avsluta loop echo"
Nu när vi skapar innehåll, låt oss skapa widgeten. Inom skapningsfunktionen, ppbv_add_admin_widget, kommer vi att ringa en annan funktion som är inbyggd i WordPress: wp_add_dashboard_widget. Allt vi behöver göra är att ge wp_add_dashboard_widget följande parametrar: [containerens namn], [titel i behållaren], [innehållsfunktion] (våra fyllningar är som sådana: "popular_by_views", "Mest populära inlägg av visningar", "ppbv_admin_widget '). Det sista vi behöver göra är att bifoga vår skapningsfunktion till wp_dashboard_setup-kroken.
funktion ppbv_add_admin_widget () wp_add_dashboard_widget ('popular_by_views', 'Mest populära inlägg av Visningar', 'ppbv_admin_widget'); // skapar en widget för admin area || wp_add_dashboard_widget ([id div], [title in div], [funktion för att köra inuti div]) add_action ('wp_dashboard_setup', 'ppbv_add_admin_widget'); // bifoga ppbv_add_admin_widget till wp_dashboard_setup
Och nu har vi en fungerande instrumentbräd widget för administratörer att se.
Att skapa en sidobar-widget är ganska smärtfri; Tyvärr är vissa delar inte dokumenterade bra (som hur man gör dem enhetliga), men vi kommer att täcka det. Låt oss börja med att skriva en ny funktion (ppbv_display_widget) och inuti det kommer vi att kopiera vår innehållsfunktion från admin-widgeten (jag föreslår att de globala samtalen flyttas till toppen, utanför
funktionen ppbv_display_widget () global $ wpdb, $ ppbv_tablename; // ring globalt för användning i funktion eko ""; // skapa ett behållareko""; // stäng behållaren wp_register_sidebar_widget (" popular_by_views "," Mest populära inlägg av visningar "," ppbv_display_widget "); // lägg till widgeten i väljmenyn || wp_register_sidebar_widget ([id för alternativet] alternativet], [funktionen ska köras från widgeten]))Mest populära av Visningar
"; // skriv titeln echo""; // skapa en beställd lista $ populär = $ wpdb-> get_results (" VÄLJ * FRÅN $ ppbv_tablename ORDER BY visningar DESC LIMIT 0,10 ", ARRAY_N); foreach ($ populär som $ post) // loop genom att returnera array av populära inlägg $ ID = $ post [1]; // lagra data i en variabel för att spara några tecken och behåll kodrengöraren $ views = number_format ($ post [2]); // number_format lägger till kommatecken i rätt fläckar för nummer (ex: 12543 till 12.543) $ post_url = get_permalink ($ ID); // få URL för det aktuella inlägget i loop $ title = get_the_title ($ ID); // få titeln av det aktuella inlägget i loop echo "
"; // stäng den beställda listan echo"- $ title - $ views visningar
"; // echo ut informationen i ett listobjekt // avsluta loop echo"
Det här är faktiskt det absolut nödvändiga för en sidofält-widget, men vilken 90% av alla dynamiska sidfält har vissa inställningar som används för hur widgets är utformade. Låt oss därför anpassa vår widget till dessa inställningar. Det första vi behöver göra är att lägga till en parameter i vår ppbv_display_widget-funktion, $ args. Genom att lägga till den här parametern inuti funktionen, med hjälp av extraktionsfunktionen på den, får vi tillgång till flera variabler som gör det möjligt för vår plugin att bli stylad på samma sätt som resten av widgetsna i sidofältet.
"Vi behöver inte ge några inmatningar för $ args, WordPress kommer att göra det för oss."
Tack vare $ args och extrakt har vi nu tillgång till följande variabler som vi kan eko för att ställa in vår widget:
funktion ppbv_display_widget ($ args) global $ wpdb, $ ppbv_tablename; // ring globalt för användning i funktionen extrakt ($ args); // ger oss standardinställningarna för widgets echo $ before_widget; // echos behållaren för widgeten || erhållen från $ args echo $ before_title. "Mest populära av Visningar". $ after_title; // echos titeln på widgeten || $ before_title / $ after_title erhållen från $ args echo ""; // skapa en beställd lista $ populär = $ wpdb-> get_results (" VÄLJ * FRÅN $ ppbv_tablename ORDER BY visningar DESC LIMIT 0,10 ", ARRAY_N); // Beställ vårt bord med största till minsta vyer och få de första 10 (dvs de 10 mest visade) föreachen ($ populär som $ post) // loop genom den returnerade gruppen av populära inlägg $ ID = $ post [1]; // lagra data i en variabel för att spara en få tecken och behåll koden renare $ views = number_format ($ post [2]); // number_format lägger kommatecken i rätt fläckar för nummer (ex: 12543 till 12.543) $ post_url = get_permalink ($ ID); // få URL-adressen till det aktuella inlägget i loop $ title = get_the_title ($ ID); // få titeln på det aktuella inlägget i loop echo "
"; // stäng den beställda listan echo $ after_widget; // stäng behållaren || erhållen från $ args- $ title - $ views visningar
"; // echo ut informationen i ett listobjekt // avsluta loop echo"
Inte alla som använder det här pluginet kommer att vilja använda widgeten, så det är absolut nödvändigt att vi ger dem en annan metod att visa vår lista. Tack och lov är det lika enkelt som att klona vår ppbv_display_widget-funktion och ta bort widgetdelarna, ersätta dem med standard hardcoded HTML.
funktion ppbv_display () global $ wpdb, $ ppbv_tablename; // ring globalt för användning i funktion eko ""; // skapa ett behållareko""; // stäng behållarenMest populära av Visningar
"; // skriv titeln echo""; // skapa en beställd lista $ populär = $ wpdb-> get_results (" VÄLJ * FRÅN $ ppbv_tablename ORDER BY visningar DESC LIMIT 0,10 ", ARRAY_N); foreach ($ populär som $ post) // loop genom att returnera array av populära inlägg $ ID = $ post [1]; // lagra data i en variabel för att spara några tecken och behåll kodrengöraren $ views = number_format ($ post [2]); // number_format lägger till kommatecken i rätt fläckar för nummer (ex: 12543 till 12.543) $ post_url = get_permalink ($ ID); // få URL för det aktuella inlägget i loop $ title = get_the_title ($ ID); // få titeln av det aktuella inlägget i loop echo "
"; // stäng den beställda listan echo"- $ title - $ views visningar
"; // echo ut informationen i ett listobjekt // avsluta loop echo"
Det är det killar, du har framgångsrikt gjort din egen "Mest populära av Visningar" WordPress plugin. Inte för svårt var det?
När du har behärskat konsten i WordPress plugin-utveckling, sluta med CodeCanyon.net och börja sälja dina plugins för vinst!
prefix.'popular_by_views'; // kombinera prefixet med vår tabellenamn funktion ppbv_create_table () global $ wpdb, $ ppbv_tablename; // ring globalt så vi kan använda dem inom funktionen $ ppbv_table = $ wpdb-> get_results ("SHOW TABLES LIKE" $ ppbv_tablename "", ARRAY_N); // returnerar null om inga resultat om (is_null ($ ppbv_table)) // om vi inte har ett bord $ create_table_sql = "CREATE TABLE $ ppbv_tablename (id BIGINT (50) INTE NULL AUTO_INCREMENT, post_id VARCHAR ) INTE NULL, visningar BIGINT (50) INTE NULL, PRIMÄR KEY (id), UNIQUE (id)); "; // var försiktig med SQL-syntaxen, det kan vara mycket finiky $ wpdb-> query ($ create_table_sql); // köra SQL-satsen i databasen $ wpdb-> flush (); // clense DB-gränssnittet register_activation_hook (__ FIL __, 'ppbv_create_table'); // kör funktionen 'ppbv_create_table' vid plugin-aktiveringsfunktionen ppbv_page_viewed () if (is_single () &&! is_page ()) // bara kör på inlägg och inte sidor globalt $ wpdb, $ post, $ ppbv_tablename; // ring globalt för användning i funciton $ wpdb-> flush (); // clense DB-gränssnittet $ data = $ wpdb-> get_row ("VÄLJ * FRÅN $ ppbv_tablename WHERE post_id =" $ post-> ID "", ARRAY_A); // Hämta data raden som har matchande post-ID om (! is_null ($ data)) // om vi har en matchande datarradie $ new_views = $ data ['views'] + 1; // öka vyerna med 1 $ wpdb-> fråga ("UPDATE $ ppbv_tablename SET views =" $ new_views "WHERE post_id =" $ post-> ID ";"); // uppdatera datarraden med de nya vyerna $ wpdb-> flush (); // clense DB-gränssnittet annars // om vi inte har en matchande datarad (ingen har sett inlägget ännu) $ wpdb-> query ("INSERT INTO $ ppbv_tablename (post_id, views) VALUES (' $ post-> ID', '1'); "); // lägg till en ny data rad i DB med post-ID och 1 visa $ wpdb-> flush (); // clense DB-gränssnittet add_action ('wp_head', 'ppbv_page_viewed'); // bifoga ppbv_page_viewed till wp_head hook funktionen ppbv_admin_widget () echo ""; // skapa en oorderad lista global $ wpdb, $ ppbv_tablename; // globalt för användning i funktion $ popular = $ wpdb-> get_results (" VÄLJ * FRÅN $ ppbv_tablename ORDER BY visningar DESC LIMIT 0,10 " ARRAY_N); // Beställ vårt bord med största till minsta antal visningar och få de första 10 (dvs de 10 mest visade) föreachen ($ populär som $ post) // gå igenom den återställda uppsättningen populära inlägg $ ID = $ inlägg [1]; // lagra data i en variabel för att spara några tecken och behåll koden renare $ views = number_format ($ post [2]); // number_format lägger till kommatecken i rätt fläckar för nummer (ex: 12543 till 12.543) $ post_url = get_permalink ($ ID); // få URL för det aktuella inlägget i loop $ title = get_the_title ($ ID); // få titeln på det aktuella inlägget i loop echo "
"; // stäng ut den oordnade listan funktionen ppbv_add_admin_widget () wp_add_dashboard_widget ('popular_by_views', 'Mest populära inlägg av visningar', 'ppbv_admin_widget'); // skapar en widget för adminområdet || wp_add_dashboard_widget ([id of div] ] [add-action ('wp_dashboard_setup', 'ppbv_add_admin_widget'); // bifoga ppbv_add_admin_widget till wp_dashboard_setup funktionen ppbv_display_widget ($ args) global $ wpdb, $ ppbv_tablename; // kalla globalt för användning i funktionen extrakt ($ args); // ger oss standardinställningarna för widgets echo $ before_widget; // echos behållaren för widgeten || erhållen från $ args echo $ before_title. "Mest populära av visningar". $ after_title; // echos titeln på widgeten || $ before_title / $ after_title erhållen från $ args echo "- $ title - $ views visningar
"; // echo ut informationen i ett listobjekt // avsluta loop echo""; // skapa en beställd lista $ populär = $ wpdb-> get_results (" VÄLJ * FRÅN $ ppbv_tablename ORDER BY visningar DESC LIMIT 0,10 ", ARRAY_N); // Beställ vårt bord med största till minsta vyer och få de första 10 (dvs de 10 mest visade) föreachen ($ populär som $ post) // loop genom den returnerade gruppen av populära inlägg $ ID = $ post [1]; // lagra data i en variabel för att spara en få tecken och behåll koden renare $ views = number_format ($ post [2]); // number_format lägger kommatecken i rätt fläckar för nummer (ex: 12543 till 12.543) $ post_url = get_permalink ($ ID); // få URL-adressen till det aktuella inlägget i loop $ title = get_the_title ($ ID); // få titeln på det aktuella inlägget i loop echo "
"; // stäng den beställda listan echo $ after_widget; // stäng behållaren || erhållen från $ args wp_register_sidebar_widget ('popular_by_views', 'Mest populära inlägg av visningar', 'ppbv_display_widget'); // lägg till widgeten till välj meny || wp_register_sidebar_widget ([alternativets namn], [alternativets titel], [funktion för att köra från widgeten]) funktion ppbv_display () global $ wpdb, $ ppbv_tablename; // globalt för användning i funktion eko "- $ title - $ views visningar
"; // echo ut informationen i ett listobjekt // avsluta loop echo""; // skapa ett behållareko""; // stäng behållaren?>Mest populära av Visningar
"; // skriv titeln echo""; // skapa en beställd lista $ populär = $ wpdb-> get_results (" VÄLJ * FRÅN $ ppbv_tablename ORDER BY visningar DESC LIMIT 0,10 ", ARRAY_N); foreach ($ populär som $ post) // loop genom att returnera array av populära inlägg $ ID = $ post [1]; // lagra data i en variabel för att spara några tecken och behåll kodrengöraren $ views = number_format ($ post [2]); // number_format lägger till kommatecken i rätt fläckar för nummer (ex: 12543 till 12.543) $ post_url = get_permalink ($ ID); // få URL för det aktuella inlägget i loop $ title = get_the_title ($ ID); // få titeln av det aktuella inlägget i loop echo "
"; // stäng den beställda listan echo"- $ title - $ views visningar
"; // echo ut informationen i ett listobjekt // avsluta loop echo"