Hvordan skrive en Mest populær av Visninger WordPress Plugin

Som du fortsetter å skrive for WordPress mer og mer, vil vanskelighetsgraden og kompleksiteten til pluginene dine til slutt komme langt utover den enkle back-end datapanulasjonen, som vist i vår nybegynners artikkel. I denne avdelingen vil vi dekke dybden: databaseinteraksjon, Admin Widgets og Sidebar Widgets. Dagens eksempel vil være et spesialbygd "Mest populært av visninger" -tillegg, som lager en admin-widget for oss å vise, og en sidebar-widget for besøkende å se.


Trinn 0. Hva det skal gjøre?

Før vi åpner vår IDE eller skriver noen kode, bør du alltid skrive ut en liste over hvilke funksjoner pluginet ditt vil og ikke vil ha (i hvert fall i sin innledende fase, kan du alltid utvide senere). For vår plugin, "Mest populær av visninger", er vår primære funksjon å vise en liste over de mest populære innleggene (vi sier topp 10). For det andre vil vi også sette listen i administrasjonsområdet som en slags lavteknologisk analyse. Til slutt gir vi utviklerne muligheten til å vise den hvor som helst ved å gjøre den tilgjengelig som en sidebar-widget, og via en enkel funksjon.

Egenskaper:

  • Oppretter en liste over de ti mest populære innleggene basert på visninger
  • Listen vises i Admin-området som en lavteknologisk analyse
  • Listen er tilgjengelig som både en sidebar-widget og -funksjon

Trinn 1. Databasen

Før vi kan vise de mest populære innleggene, må vi samle inn data om hvilke innlegg som blir sett og hvor ofte, men selv før vi kan gjøre det, trenger vi et sted å sette alle de dataene. Innsiden av en ny pluginfil, la oss lage en ny funksjon (ppbv_create_table) som vil sjekke for å se om vårt bord finnes. Hvis det ikke gjør det, lager vi det. Vår metode for å gjøre dette er ganske enkel; Vi bruker $ wpdb-> get_results for å kjøre en SQL-setning som sjekker for et bord som heter "wp_popular_by_views." Hvis den ikke finner tabellen, returneres get_results null. Hvis det er tilfelle, bruker vi $ wpdb-> spørring for å skrive i det nye tabellen. Vi kjører denne funksjonen hver gang pluginet er aktivert.

 prefix.'popular_by_views'; // kombinere prefikset med vår tabellenavnfunksjon ppbv_create_table () global $ wpdb, $ ppbv_tablename; // ring global slik at vi kan bruke dem i funksjonen $ ppbv_table = $ wpdb-> get_results ("SHOW TABLES LIKE" $ ppbv_tablename '", ARRAY_N); // returnerer null hvis ingen resultater hvis (is_null ($ ppbv_table)) // hvis vi ikke har et bord $ create_table_sql = "CREATE TABLE $ ppbv_tablename (id BIGINT (50) IKKE NULL AUTO_INCREMENT, post_id VARCHAR ) IKKE NULL, visninger BIGINT (50) IKKE NULL, PRIMARY KEY (id), UNIQUE (id)); "; // Vær forsiktig med SQL-syntaks, det kan være veldig finiky $ wpdb-> spørring ($ create_table_sql); // kjør SQL-setningen i databasen register_activation_hook (__ FIL __, 'ppbv_create_table'); // Kjør funksjonen 'ppbv_create_table' ved plugin aktivering?>

Trinn 2. Fange opp dataene

Det neste vi må gjøre, nå som vi har et bord for å lagre dataene våre, er fangst av våre data. Vi lager en ny funksjon (ppbv_page_viewed) som vi vil legge ved wp_head krok slik at den løper på hver sidebelastning. Innenfor denne funksjonen skal vi gjøre en av to ting, etter at vi har sjekket for å se om den nåværende siden allerede er i databasen: Øk visningen med en eller, hvis den ikke er i databasen, legg den til i databasen. For å finne ut om den nåværende siden allerede er i databasen, skal vi bruke $ post Motta for å få "post_ID." Dette trinnet er faktisk veldig enkelt, fordi vi ikke samler inn kompliserte data; kommentarene i koden gir et detaljert trinn for trinn i denne prosessen.

 funksjonen ppbv_page_viewed () if (is_single () &&! is_page ()) // bare kjøres på innlegg og ikke sider globale $ wpdb, $ post, $ ppbv_tablename; // ring global for bruk i funciton $ wpdb-> flush (); // klare DB-grensesnittet $ data = $ wpdb-> get_row ("VELG * FRA $ ppbv_tablename WHERE post_id =" $ post-> ID "", ARRAY_A); // få datarollen som har matchende post-ID hvis (! is_null ($ data)) // hvis vi har en matchende datarute $ new_views = $ data ['views'] + 1; // øke visningene med 1 $ wpdb-> spørring ("UPDATE $ ppbv_tablename SET views =" $ new_views "WHERE post_id =" $ post-> ID ";"); // oppdater dataraden med de nye visningene $ wpdb-> flush (); // clense DB-grensesnittet ellers // hvis vi ikke har en samsvarende datarute (ingen har sett innlegget ennå) $ wpdb-> query ("INSERT INTO $ ppbv_tablename (post_id, visninger) VALUES (' $ post-> ID', '1'); "); // legg til en ny datarute i DB med post-ID og 1 vis $ wpdb-> flush (); // klare DB-grensesnittet add_action ('wp_head', 'ppbv_page_viewed'); // vedlegg ppbv_page_viewed til wp_head kroken 

Trinn 3. Opprett Admin Widget

Neste opp, vi skal bruke disse dataene vi nettopp har lagt til i vår database for å lage en bestilt liste inne i en Admin-området Dashboard Widget. Denne prosessen innebærer to funksjoner: den første (ppbv_admin_widget) for å generere alt inne i widgeten, og for det andre, (ppbv_add_admin_widget) for å lage widgeten selv. La oss starte med innholdsfunksjonen, pppbv_admin_widget. For det første, siden vi lager en ordnet liste, la oss ekko ut åpningstempillene for det. Da globaliserer vi $ wpdb og $ ppbv_tablename vars, så vi kan få tilgang til databasen og hente de ti mest viste innleggets ID-er. Så kjører vi den returnerte gruppen gjennom a for hver erklæring, og bruk hver enkelt ID til å bygge et listingsobjekt og opprette en kobling til den siden mens du også skriver ut sine visninger (formatert med number_format for å gjøre det lettere å lese).

 funksjon ppbv_admin_widget () echo "
    "; // lage en uordnet liste global $ wpdb, $ ppbv_tablename; // ring global for bruk i funksjon $ popular = $ wpdb-> get_results (" VELG * FRA $ ppbv_tablename ORDER BY visninger DESC LIMIT 0,10 " ARRAY_N); // Bestil bordet vårt med størst til minste visning, og få de første 10 (dvs. de 10 mest viste) foreach ($ populære som $ post) // gå gjennom den returnerte gruppen av populære innlegg $ ID = $ innlegg [1]; // lagre dataene i en variabel for å lagre noen få tegn og hold koden renere $ views = number_format ($ post [2]); // number_format legger kommasene i de riktige stedene for tall (ex: 12543 til 12.543) $ post_url = get_permalink ($ ID); // få URL til nåværende innlegg i løkken $ title = get_the_title ($ ID); // få tittelen på det nåværende innlegget i loop echo "
  1. $ title - $ views visninger
  2. "; // ekko ut informasjonen i en liste-gjenstand / avslutte loop echo"
"; // lukke ut den uordnede listen

Nå som vi genererer innhold, la oss lage widgeten. Inne i skapelsesfunksjonen, ppbv_add_admin_widget, skal vi ringe en annen funksjon innfødt til WordPress: wp_add_dashboard_widget. Alt vi trenger å gjøre er å gi wp_add_dashboard_widget følgende parametre: [ID for containeren], [tittel i containeren], [innholdsfunksjon] (våre fyller som sådan: 'popular_by_views', 'Mest populære innlegg av visninger', 'ppbv_admin_widget '). Det siste vi trenger å gjøre er å legge til vår etableringsfunksjon i wp_dashboard_setup-kroken.

 funksjon ppbv_add_admin_widget () wp_add_dashboard_widget ('popular_by_views', 'Mest populære innlegg av Visninger', 'ppbv_admin_widget'); // lager en admin area widget || wp_add_dashboard_widget ([id div], [title in div], [funksjon for å kjøre inne i div]) add_action ('wp_dashboard_setup', 'ppbv_add_admin_widget'); // legg til ppbv_add_admin_widget til wp_dashboard_setup 

Og nå har vi en fungerende dashboard-widget for administratorer å se.


Trinn 4. Opprett sidebar Widget

Å lage en sidebar-widget er ganske smertefri; Dessverre er enkelte deler ikke dokumentert godt (som hvordan man gjør dem ensartede), men vi vil dekke det. La oss begynne med å skrive en ny funksjon (ppbv_display_widget) og inne i det, vil vi kopiere innholdsfunksjonen fra admin-widgeten (jeg foreslår at du flytter globale samtaler til toppen, utenfor

    ekko, av funksjonen for klarhet senere). Så er det neste trinnet å registrere vår widget i WordPress via wp_register_sidebar_widget (parametere er: [ID på containeren], [tittel på widget siden], [innholdsfunksjon] || 'popular_by_views', 'Mest populære innlegg av Visninger', 'ppbv_display_widget').

     funksjonen ppbv_display_widget () global $ wpdb, $ ppbv_tablename; // ring global for bruk i funksjon ekko "
    "; // lage et beholder ekko"

    Mest populær av Visninger

    "; // skrive tittel ekko"
      "; // lage en ordnet liste $ populær = $ wpdb-> get_results (" SELECT * FRA $ ppbv_tablename ORDER BY visninger DESC LIMIT 0,10 ", ARRAY_N); foreach ($ populært som $ post) gjennom den returnerte gruppen av populære innlegg $ ID = $ post [1]; // lagre dataene i en variabel for å lagre noen få tegn og hold koden renere $ views = number_format ($ post [2]); // number_format legger til kommaene i de riktige stedene for numre (ex: 12543 til 12.543) $ post_url = get_permalink ($ ID); // få URL til nåværende innlegg i loop $ title = get_the_title ($ ID); // få tittelen av det nåværende innlegget i loop echo "
    1. $ title - $ views visninger
    2. "; // ekko ut informasjonen i en liste-gjenstand / avslutte loop echo"
    "; // lukk den bestilte listen ekko"
    "; // lukk beholderen wp_register_sidebar_widget ('popular_by_views', 'Mest populære innlegg av visninger', 'ppbv_display_widget'); // legge til widgeten i valgmenyen || wp_register_sidebar_widget ([id av alternativet] alternativet], [funksjon for å kjøre fra widgeten]))

    Dette er faktisk det minste minimumet du trenger å gjøre for en sidebar-widget, men hvilken 90% av alle dynamiske sidebjelker har visse innstillinger brukt for hvordan widgets er utformet, så la oss tilpasse vår widget til disse innstillingene. Det første vi må gjøre er å legge til en parameter i vår ppbv_display_widget-funksjon, $ args. Ved å legge til denne parameteren inne i funksjonen, ved å bruke ekstraktfunksjonen på den, får vi tilgang til flere variabler som gjør at pluginet vårt kan stiles på samme måte som resten av widgets i sidepanelet.

    "Vi trenger ikke å gi noen innspill for $ args, WordPress vil gjøre det for oss."

    Takket være $ args og ekstrakt, har vi nå tilgang til følgende variabler som vi kan ekko for å style vår widget:

    • $ before_widget
    • $ after_widget
    • $ before_title
    • $ after_title
     funksjon ppbv_display_widget ($ args) global $ wpdb, $ ppbv_tablename; // ring global for bruk i funksjonen ekstrakt ($ args); // gir oss standardinnstillingene til widgets echo $ before_widget; // ekkoer beholderen for widgeten || hentet fra $ args echo $ before_title. "Mest populær av visninger". $ after_title; // ekkoer tittelen på widgeten || $ before_title / $ after_title hentet fra $ args echo "
      "; // lage en bestilt liste $ populær = $ wpdb-> get_results (" VELGE * FRA $ ppbv_tablename BESTILL BY visninger DESC LIMIT 0,10 ", ARRAY_N); // Bestil bordet vårt med størst til minste visninger og få de første 10 (dvs. de 10 mest viste) foreach ($ populære som $ post) // gå gjennom den returnerte gruppen av populære innlegg $ ID = $ post [1]; // lagre dataene i en variabel for å lagre en få tegn og hold koden renere $ views = number_format ($ post [2]); // number_format legger kommasene i de riktige stedene for tall (ex: 12543 til 12.543) $ post_url = get_permalink ($ ID); // få URL-adressen til det nåværende innlegget i løkken $ title = get_the_title ($ ID); // få tittelen på det nåværende innlegget i loop echo "
    1. $ title - $ views visninger
    2. "; // ekko ut informasjonen i en liste-gjenstand / avslutte loop echo"
    "; // lukk den ordnede listen echo $ after_widget; // lukk beholderen || hentet fra $ args

    Trinn 5. Funksjonen for ikke-widget

    Ikke alle som bruker dette pluginet vil bruke widgeten, så det er viktig at vi gir dem en annen metode for å vise vår liste. Heldigvis er det så enkelt som å klone vår ppbv_display_widget-funksjon og fjerne widgetdelene, erstatte dem med standard hardcoded HTML.

     funksjon ppbv_display () global $ wpdb, $ ppbv_tablename; // ring global for bruk i funksjon ekko "
    "; // lage et beholder ekko"

    Mest populær av Visninger

    "; // skrive tittel ekko"
      "; // lage en ordnet liste $ populær = $ wpdb-> get_results (" SELECT * FRA $ ppbv_tablename ORDER BY visninger DESC LIMIT 0,10 ", ARRAY_N); foreach ($ populært som $ post) gjennom den returnerte gruppen av populære innlegg $ ID = $ post [1]; // lagre dataene i en variabel for å lagre noen få tegn og hold koden renere $ views = number_format ($ post [2]); // number_format legger til kommaene i de riktige stedene for numre (ex: 12543 til 12.543) $ post_url = get_permalink ($ ID); // få URL til nåværende innlegg i loop $ title = get_the_title ($ ID); // få tittelen av det nåværende innlegget i loop echo "
    1. $ title - $ views visninger
    2. "; // ekko ut informasjonen i en liste-gjenstand / avslutte loop echo"
    "; // lukk den bestilte listen ekko"
    "; // lukk beholderen

    Konklusjon

    Det er det gutta, du har lykkes med å lage din egen "Mest populære av Visninger" WordPress plugin. Ikke for vanskelig, var det?

    Når du har mestret kunsten til WordPress plugin utvikling, stopp ved CodeCanyon.net og begynn å selge plugins for profitt!

    Se Endelig Kildekode med kommentar?

     prefix.'popular_by_views'; // kombinere prefikset med vår tabellenavnfunksjon ppbv_create_table () global $ wpdb, $ ppbv_tablename; // ring global slik at vi kan bruke dem i funksjonen $ ppbv_table = $ wpdb-> get_results ("SHOW TABLES LIKE" $ ppbv_tablename '", ARRAY_N); // returnerer null hvis ingen resultater hvis (is_null ($ ppbv_table)) // hvis vi ikke har et bord $ create_table_sql = "CREATE TABLE $ ppbv_tablename (id BIGINT (50) IKKE NULL AUTO_INCREMENT, post_id VARCHAR ) IKKE NULL, visninger BIGINT (50) IKKE NULL, PRIMARY KEY (id), UNIQUE (id)); "; // Vær forsiktig med SQL-syntaks, det kan være veldig finiky $ wpdb-> spørring ($ create_table_sql); // Kjør SQL-setningen i databasen $ wpdb-> flush (); // klare DB-grensesnittet register_activation_hook (__ FIL __, 'ppbv_create_table'); // kjør funksjonen 'ppbv_create_table' ved plugin aktiveringsfunksjon ppbv_page_viewed () if (is_single () &&! is_page ()) // bare kjøres på innlegg og ikke sider globale $ wpdb, $ post, $ ppbv_tablename; // ring global for bruk i funciton $ wpdb-> flush (); // klare DB-grensesnittet $ data = $ wpdb-> get_row ("VELG * FRA $ ppbv_tablename WHERE post_id =" $ post-> ID "", ARRAY_A); // få datarollen som har matchende post-ID hvis (! is_null ($ data)) // hvis vi har en matchende datarute $ new_views = $ data ['views'] + 1; // øke visningene med 1 $ wpdb-> spørring ("UPDATE $ ppbv_tablename SET views =" $ new_views "WHERE post_id =" $ post-> ID ";"); // oppdater dataraden med de nye visningene $ wpdb-> flush (); // clense DB-grensesnittet ellers // hvis vi ikke har en samsvarende datarute (ingen har sett innlegget ennå) $ wpdb-> query ("INSERT INTO $ ppbv_tablename (post_id, visninger) VALUES (' $ post-> ID', '1'); "); // legg til en ny datarute i DB med post-ID og 1 vis $ wpdb-> flush (); // klare DB-grensesnittet add_action ('wp_head', 'ppbv_page_viewed'); // vedlegg ppbv_page_viewed til wp_head hook-funksjonen ppbv_admin_widget () echo "
      "; // lage en uordnet liste global $ wpdb, $ ppbv_tablename; // ring global for bruk i funksjon $ popular = $ wpdb-> get_results (" VELG * FRA $ ppbv_tablename ORDER BY visninger DESC LIMIT 0,10 " ARRAY_N); // Bestil bordet vårt med størst til minste visning, og få de første 10 (dvs. de 10 mest viste) foreach ($ populære som $ post) // gå gjennom den returnerte gruppen av populære innlegg $ ID = $ innlegg [1]; // lagre dataene i en variabel for å lagre noen få tegn og hold koden renere $ views = number_format ($ post [2]); // number_format legger kommasene i de riktige stedene for tall (ex: 12543 til 12.543) $ post_url = get_permalink ($ ID); // få URL til nåværende innlegg i løkken $ title = get_the_title ($ ID); // få tittelen på det nåværende innlegget i loop echo "
    1. $ title - $ views visninger
    2. "; // ekko ut informasjonen i en liste-gjenstand / avslutte loop echo"
    "; // lukk ut den uordnede listen funksjonen ppbv_add_admin_widget () wp_add_dashboard_widget ('popular_by_views', 'Mest populære innlegg av visninger', 'ppbv_admin_widget'); // lager en admin area widget || wp_add_dashboard_widget ([id of div] ] [add-action ('wp_dashboard_setup', 'ppbv_add_admin_widget'); // legge ppbv_add_admin_widget til wp_dashboard_setup-funksjonen ppbv_display_widget ($ args) global $ wpdb, $ ppbv_tablename; // ring global for bruk i funksjonen ekstrakt ($ args); // gir oss standardinnstillingene til widgets echo $ before_widget; // ekko beholderen for widgeten || hentet fra $ args echo $ before_title. "Mest populær av visninger". $ after_title; // ekko tittelen på widgeten || $ before_title / $ after_title hentet fra $ args echo "
      "; // lage en bestilt liste $ populær = $ wpdb-> get_results (" VELGE * FRA $ ppbv_tablename BESTILL BY visninger DESC LIMIT 0,10 ", ARRAY_N); // Bestil bordet vårt med størst til minste visninger og få de første 10 (dvs. de 10 mest viste) foreach ($ populære som $ post) // gå gjennom den returnerte gruppen av populære innlegg $ ID = $ post [1]; // lagre dataene i en variabel for å lagre en få tegn og hold koden renere $ views = number_format ($ post [2]); // number_format legger kommasene i de riktige stedene for tall (ex: 12543 til 12.543) $ post_url = get_permalink ($ ID); // få URL-adressen til det nåværende innlegget i løkken $ title = get_the_title ($ ID); // få tittelen på det nåværende innlegget i loop echo "
    1. $ title - $ views visninger
    2. "; // ekko ut informasjonen i en liste-gjenstand / avslutte loop echo"
    "; // lukk den ordnede listen echo $ after_widget; // lukk beholderen || hentet fra $ args wp_register_sidebar_widget ('popular_by_views', 'Mest populære innlegg av visninger', 'ppbv_display_widget'); // legge til widgeten til velg menyen || wp_register_sidebar_widget ([ID for alternativet], [valgalternativet], [funksjon for å kjøre fra widgeten]) funksjon ppbv_display () global $ wpdb, $ ppbv_tablename; // ring global for bruk i funksjon ekko "
    "; // lage et beholder ekko"

    Mest populær av Visninger

    "; // skrive tittel ekko"
      "; // lage en ordnet liste $ populær = $ wpdb-> get_results (" SELECT * FRA $ ppbv_tablename ORDER BY visninger DESC LIMIT 0,10 ", ARRAY_N); foreach ($ populært som $ post) gjennom den returnerte gruppen av populære innlegg $ ID = $ post [1]; // lagre dataene i en variabel for å lagre noen få tegn og hold koden renere $ views = number_format ($ post [2]); // number_format legger til kommaene i de riktige stedene for numre (ex: 12543 til 12.543) $ post_url = get_permalink ($ ID); // få URL til nåværende innlegg i loop $ title = get_the_title ($ ID); // få tittelen av det nåværende innlegget i loop echo "
    1. $ title - $ views visninger
    2. "; // ekko ut informasjonen i en liste-gjenstand / avslutte loop echo"
    "; // lukk den bestilte listen ekko"
    "; // lukk beholderen?>