Hoe een Most Popular By Views WordPress Plugin te schrijven

Naarmate je steeds vaker voor WordPress gaat schrijven, zal de moeilijkheidsgraad en complexiteit van je plug-ins uiteindelijk veel verder reiken dan de eenvoudige manipulatie van back-endgegevens, zoals aangetoond in ons beginnersartikel. In deze aflevering gaan we dieper in: database-interactie, Admin Widgets en zijbalkwidgets. Het voorbeeld van vandaag is een op maat gemaakte plug-in 'Most Popular by Views', waarmee een widget voor een beheerdersgebied wordt gemaakt en een zijbalkwidget voor bezoekers om te bekijken.


Stap 0. Wat het gaat doen?

Voordat we onze IDE openen of een code schrijven, moet je altijd een lijst opschrijven van welke functies je plugin wel en niet zal hebben (in ieder geval in de beginfase, kun je deze altijd later verlengen). Voor onze plug-in, 'Meest populair bij weergaven', is onze belangrijkste functie om een ​​lijst weer te geven van de populairste berichten (we zullen zeggen, top 10). Ten tweede zullen we de lijst ook in het beheerdersgedeelte plaatsen als een soort van low-tech analyse. Ten slotte geven we de ontwikkelaars de mogelijkheid om het overal weer te geven door het beschikbaar te maken als een zijbalkwidget en via een eenvoudige functie.

Kenmerken:

  • Creëert een lijst van de top tien meest populaire berichten op basis van weergaven
  • Lijst wordt weergegeven in Beheergebied als een low-tech analyse
  • Lijst is beschikbaar als zowel een zijbalkwidget als -functie

Stap 1. De database

Voordat we de meest populaire berichten kunnen weergeven, moeten we gegevens verzamelen over welke berichten worden bekeken en hoe vaak, maar zelfs voordat we dat kunnen doen, hebben we ergens een plek nodig om al die gegevens te plaatsen. Klik in een nieuw plugin-bestand een nieuwe functie aan (ppbv_create_table) die zal controleren om te zien of onze tafel bestaat. Als dit niet het geval is, maken we het. Onze methode om dit te doen is vrij simpel; we gebruiken $ wpdb-> get_results om een ​​SQL-instructie uit te voeren die controleert op een tabel met de naam "wp_popular_by_views." Als de tabel niet wordt gevonden, worden get_results null geretourneerd. Als dat het geval is, gebruiken we $ wpdb-> query om in de nieuwe tabel te schrijven. We voeren deze functie elke keer dat de plug-in is geactiveerd.

 prefix.'popular_by_views'; // combineer het voorvoegsel met onze tablename-functie ppbv_create_table () global $ wpdb, $ ppbv_tablename; // roep globaal zodat we ze kunnen gebruiken binnen de functie $ ppbv_table = $ wpdb-> get_results ("LAAT TABELLEN LIKEN ALS '$ ppbv_tablename'", ARRAY_N); // retourneert null als geen resultaten if (is_null ($ ppbv_table)) // als we geen tabel $ create_table_sql = "MAKEN TABLE $ ppbv_tablename (id BIGINT (50) NOT NULL AUTO_INCREMENT, post_id VARCHAR (255 ) NOT NULL, views BIGINT (50) NOT NULL, PRIMARY KEY (id), UNIQUE (id)); "; // wees voorzichtig met SQL-syntaxis, het kan ZEER finiky zijn $ wpdb-> query ($ create_table_sql); // voer de SQL-instructie uit in de database register_activation_hook (__ FILE __, 'ppbv_create_table'); // voer de functie 'ppbv_create_table' uit bij activering van plug-in?>

Stap 2. De gegevens vangen

Het volgende dat we moeten doen, nu we een tabel hebben om onze gegevens op te slaan, is om onze gegevens te verzamelen. We zullen een nieuwe functie maken (ppbv_page_viewed) die we koppelen aan de wp_head haak zodat het bij elke pagina wordt geladen. Binnen deze functie gaan we een van de twee dingen doen, nadat we hebben gecontroleerd of de huidige pagina al in de database staat: verhoog de weergave met één of, als deze niet in de database staat, voeg deze toe aan de database. Om erachter te komen of de huidige pagina al in de database staat, gebruiken we de $ bericht object om de 'post_ID' te krijgen. Deze stap is eigenlijk heel simpel, omdat we geen gecompliceerde gegevens verzamelen; de opmerkingen in de code geven stapsgewijs een gedetailleerde beschrijving van dit proces.

 function ppbv_page_viewed () if (is_single () &&! is_page ()) // alleen op berichten en niet op pagina's globaal $ wpdb, $ post, $ ppbv_tablename; // call global voor gebruik in funciton $ wpdb-> flush (); // clense de DB-interface $ data = $ wpdb-> get_row ("SELECT * FROM $ ppbv_tablename WHERE post_id =" $ post-> ID "", ARRAY_A); // haal de gegevensrij met de overeenkomende bericht-id op als (! is_null ($ data)) // als we een rij met overeenkomende gegevens hebben $ new_views = $ data ['views'] + 1; // verhoog de weergaven met 1 $ wpdb-> query ("UPDATE $ ppbv_tablename SET views =" $ new_views "WHERE post_id =" $ post-> ID ";"); // update de gegevensrij met de nieuwe weergaven $ wpdb-> flush (); // clense de DB-interface else // als we geen rij met overeenkomende gegevens hebben (niemand heeft de post nog bekeken) $ wpdb-> query ("INSERT INTO $ ppbv_tablename (post_id, views) VALUES (' $ post-> ID', '1'); "); // voeg een nieuwe gegevensrij toe aan de database met de bericht-ID en 1 bekijk $ wpdb-> flush (); // clense de DB-interface add_action ('wp_head', 'ppbv_page_viewed'); // koppel ppbv_page_viewed aan de haak wp_head 

Stap 3. De beheerderswidget maken

Vervolgens gaan we de gegevens gebruiken die we zojuist aan onze database hebben toegevoegd om een ​​geordende lijst te maken binnen een dashboarddashboard-widget. Dit proces omvat twee functies: de eerste (ppbv_admin_widget) om alles in de widget te genereren en ten tweede (ppbv_add_admin_widget) om de widget zelf te maken. Laten we beginnen met de inhoudsfunctie, pppbv_admin_widget. Ten eerste, laten we, omdat we een geordende lijst maken, de openingstags hiervoor herhalen. Vervolgens globaliseren we de $ wpdb en $ ppbv_tablename vars, zodat we toegang hebben tot de database en de tien meest bekeken berichten kunnen ophalen. Vervolgens voeren we de geretourneerde array door via een foreach en gebruik elke afzonderlijke ID om een ​​lijstitem te maken en een koppeling naar die pagina te maken, terwijl ook de weergaven worden afgedrukt (opgemaakt met nummer_format om het gemakkelijker te kunnen lezen).

 function ppbv_admin_widget () echo "
    "; // maak een ongeordende lijst globaal $ wpdb, $ ppbv_tablename; // call global voor gebruik in functie $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY views DESC LIMIT 0,10 ", ARRAY_N); // Bestel onze tabel met de grootste tot de kleinste weergave en haal dan de eerste 10 (dwz de top 10 meest bekeken) voor elke ($ populaire als $ post) // doorloop de geretourneerde reeks populaire berichten $ ID = $ post [1]; // sla de gegevens op in een variabele om een ​​paar tekens op te slaan en houd de code schoner $ views = number_format ($ post [2]); // number_format voegt de komma's toe op de juiste plaats voor getallen (ex: 12543 tot 12.543) $ post_url = get_permalink ($ ID); // haal de URL van het huidige bericht in de lus $ title = get_the_title ($ ID); // haal de titel van het huidige bericht in de lus-echo "
  1. $ title - $ views weergaven
  2. "; // echo van de informatie in een lijstitem // de echo van de lus beëindigen"
"; // sluit de ongeordende lijst af

Nu we inhoud genereren, maken we de widget. Binnen de creatie functie, ppbv_add_admin_widget, gaan we een andere functie gebruiken die oorspronkelijk is voor WordPress: wp_add_dashboard_widget. Het enige dat we moeten doen is wp_add_dashboard_widget de volgende parameters geven: [id van de container], [titel in de container], [inhoudsfunctie] (de onze vult als zodanig: 'popular_by_views', 'Meest populaire berichten op weergaven', 'ppbv_admin_widget '). Het laatste dat we moeten doen, is onze creatiefunctie koppelen aan de haak wp_dashboard_setup.

 functie ppbv_add_admin_widget () wp_add_dashboard_widget ('popular_by_views', 'Most Popular Posts by Views', 'ppbv_admin_widget'); // maakt een admingebied-widget || wp_add_dashboard_widget ([id van div], [title in div], [functie die binnen div wordt uitgevoerd]) add_action ('wp_dashboard_setup', 'ppbv_add_admin_widget'); // attach ppbv_add_admin_widget to wp_dashboard_setup 

En nu hebben we een werkende dashboard-widget voor beheerders om te zien.


Stap 4. De zijbalk-widget maken

Het creëren van een zijbalkwidget is vrij pijnloos; helaas zijn bepaalde delen niet goed gedocumenteerd (zoals hoe je ze uniform maakt), maar dat regelen we. Laten we beginnen met het schrijven van een nieuwe functie (ppbv_display_widget) en binnenin kopiëren we onze inhoudsfunctie via de beheerderswidget (ik raad aan om de wereldwijde oproepen naar de top te verplaatsen, buiten de

    echo, van de functie voor duidelijkheid later). Vervolgens is de volgende stap om onze widget in WordPress te registreren via wp_register_sidebar_widget (parameters zijn: [id van de container], [titel op de widgetpagina], [inhoudsfunctie] || 'popular_by_views', 'Meest populaire berichten op weergaven', 'ppbv_display_widget').

     function ppbv_display_widget () global $ wpdb, $ ppbv_tablename; // call global voor gebruik in functie-echo "
    "; // een container-echo maken"

    Meest populair op weergaven

    "; // schrijf de titel echo"
      "; // maak een geordende lijst $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY-weergaven DESC LIMIT 0,10 ", ARRAY_N); foreach ($ popular as $ post) // loop via de geretourneerde reeks populaire berichten $ ID = $ post [1]; // sla de gegevens op in een variabele om een ​​paar tekens op te slaan en houd de code schoner $ views = number_format ($ post [2]); // number_format voegt toe de komma's op de juiste plekken voor getallen (bijv. 12543 tot 12.543) $ post_url = get_permalink ($ ID); // haal de URL van het huidige bericht in de lus $ title = get_the_title ($ ID); // verkrijg de titel van het huidige bericht in de loop-echo "
    1. $ title - $ views weergaven
    2. "; // echo van de informatie in een lijstitem // de echo van de lus beëindigen"
    "; // sluit de geordende lijst echo"
    "; // sluit de container wp_register_sidebar_widget ('popular_by_views', 'Most Popular Posts by Views', 'ppbv_display_widget'); // voeg de widget toe aan het selectiemenu || wp_register_sidebar_widget ([id van de optie], [titel van de optie], [functie om vanuit de widget uit te voeren]))

    Dit is eigenlijk het absolute minimum dat je moet doen voor een sidebar-widget, maar 90% van alle dynamische zijbalken hebben bepaalde instellingen toegepast over hoe widgets worden gestileerd, dus laten we onze widget aanpassen aan die instellingen. Het eerste wat we moeten doen is een parameter toevoegen aan onze ppbv_display_widget-functie, $ args. Door deze parameter toe te voegen aan de functie, met behulp van de extract-functie, krijgen we toegang tot verschillende variabelen waarmee onze plug-in op dezelfde manier kan worden gestileerd als de rest van de widgets in de zijbalk.

    "We hoeven geen input te leveren voor $ args, WordPress zal dat voor ons doen."

    Dankzij $ args en extract hebben we nu toegang tot de volgende variabelen die we kunnen gebruiken om onze widget te stijlen:

    • $ before_widget
    • $ after_widget
    • $ before_title
    • $ after_title
     functie ppbv_display_widget ($ args) global $ wpdb, $ ppbv_tablename; // call global voor gebruik in functie-extract ($ args); // geeft ons de standaardinstellingen van widgets echo $ before_widget; // echoot de container voor de widget || verkregen van $ args echo $ before_title. "Most Popular by Views". $ after_title; // echoot de titel van de widget || $ before_title / $ after_title verkregen van $ args echo "
      "; // maak een geordende lijst $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY-weergaven DESC LIMIT 0,10 ", ARRAY_N); // Bestel onze tabel op grootst van kleinste afbeeldingen en krijg dan de eerste 10 (dwz de top 10 meest bekeken) foreach ($ popular als $ post) // doorlopen de geretourneerde array van populaire berichten $ ID = $ post [1]; // sla de gegevens op in een variabele om een paar karakters en houd de code schoner $ views = number_format ($ post [2]); // number_format voegt de komma's op de juiste plekken voor nummers toe (ex: 12543 tot 12.543) $ post_url = get_permalink ($ ID); // krijg de URL van het huidige bericht in de lus $ title = get_the_title ($ ID); // haal de titel van het huidige bericht in de lus-echo "
    1. $ title - $ views weergaven
    2. "; // echo van de informatie in een lijstitem // de echo van de lus beëindigen"
    "; // sluit de bestelde lijst echo $ after_widget; // sluit de container || verkregen uit $ args

    Stap 5. De niet-widget-functie

    Niet iedereen die deze plug-in gebruikt, zal de widget willen gebruiken, dus is het noodzakelijk dat we hem voorzien van een andere methode om onze lijst weer te geven. Gelukkig is dat net zo eenvoudig als het klonen van onze ppbv_display_widget-functie en het verwijderen van de widgetonderdelen, ze te vervangen door standaard hardcoded HTML.

     function ppbv_display () global $ wpdb, $ ppbv_tablename; // call global voor gebruik in functie-echo "
    "; // een container-echo maken"

    Meest populair op weergaven

    "; // schrijf de titel echo"
      "; // maak een geordende lijst $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY-weergaven DESC LIMIT 0,10 ", ARRAY_N); foreach ($ popular as $ post) // loop via de geretourneerde reeks populaire berichten $ ID = $ post [1]; // sla de gegevens op in een variabele om een ​​paar tekens op te slaan en houd de code schoner $ views = number_format ($ post [2]); // number_format voegt toe de komma's op de juiste plekken voor getallen (bijv. 12543 tot 12.543) $ post_url = get_permalink ($ ID); // haal de URL van het huidige bericht in de lus $ title = get_the_title ($ ID); // verkrijg de titel van het huidige bericht in de loop-echo "
    1. $ title - $ views weergaven
    2. "; // echo van de informatie in een lijstitem // de echo van de lus beëindigen"
    "; // sluit de geordende lijst echo"
    "; // de container sluiten

    Conclusie

    Dat is het jongens, je hebt met succes je eigen "Most Popular by Views" WordPress plug-in gemaakt. Niet te moeilijk, was het?

    Wanneer je de kunst van het ontwikkelen van WordPress-plug-ins onder de knie hebt, stop dan bij CodeCanyon.net en begin met het verkopen van je plug-ins voor winst!

    Bekijk de definitieve broncode met commentaar?

     prefix.'popular_by_views'; // combineer het voorvoegsel met onze tablename-functie ppbv_create_table () global $ wpdb, $ ppbv_tablename; // roep globaal zodat we ze kunnen gebruiken binnen de functie $ ppbv_table = $ wpdb-> get_results ("LAAT TABELLEN LIKEN ALS '$ ppbv_tablename'", ARRAY_N); // retourneert null als geen resultaten if (is_null ($ ppbv_table)) // als we geen tabel $ create_table_sql = "MAKEN TABLE $ ppbv_tablename (id BIGINT (50) NOT NULL AUTO_INCREMENT, post_id VARCHAR (255 ) NOT NULL, views BIGINT (50) NOT NULL, PRIMARY KEY (id), UNIQUE (id)); "; // wees voorzichtig met SQL-syntaxis, het kan ZEER finiky zijn $ wpdb-> query ($ create_table_sql); // voer de SQL-instructie uit in de database $ wpdb-> flush (); // clense de DB-interface register_activation_hook (__ FILE __, 'ppbv_create_table'); // voer de functie 'ppbv_create_table' uit op de activeringsfunctie voor plug-ins ppbv_page_viewed () if (is_single () &&! is_page ()) // alleen uitvoeren op berichten en niet op pagina's globaal $ wpdb, $ post, $ ppbv_tablename; // call global voor gebruik in funciton $ wpdb-> flush (); // clense de DB-interface $ data = $ wpdb-> get_row ("SELECT * FROM $ ppbv_tablename WHERE post_id =" $ post-> ID "", ARRAY_A); // haal de gegevensrij met de overeenkomende bericht-id op als (! is_null ($ data)) // als we een rij met overeenkomende gegevens hebben $ new_views = $ data ['views'] + 1; // verhoog de weergaven met 1 $ wpdb-> query ("UPDATE $ ppbv_tablename SET views =" $ new_views "WHERE post_id =" $ post-> ID ";"); // update de gegevensrij met de nieuwe weergaven $ wpdb-> flush (); // clense de DB-interface else // als we geen rij met overeenkomende gegevens hebben (niemand heeft de post nog bekeken) $ wpdb-> query ("INSERT INTO $ ppbv_tablename (post_id, views) VALUES (' $ post-> ID', '1'); "); // voeg een nieuwe gegevensrij toe aan de database met de bericht-ID en 1 bekijk $ wpdb-> flush (); // clense de DB-interface add_action ('wp_head', 'ppbv_page_viewed'); // koppel ppbv_page_viewed aan de functie wp_head hook ppbv_admin_widget () echo "
      "; // maak een ongeordende lijst globaal $ wpdb, $ ppbv_tablename; // call global voor gebruik in functie $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY views DESC LIMIT 0,10 ", ARRAY_N); // Bestel onze tabel met de grootste tot de kleinste weergave en haal dan de eerste 10 (dwz de top 10 meest bekeken) voor elke ($ populaire als $ post) // doorloop de geretourneerde reeks populaire berichten $ ID = $ post [1]; // sla de gegevens op in een variabele om een ​​paar tekens op te slaan en houd de code schoner $ views = number_format ($ post [2]); // number_format voegt de komma's toe op de juiste plaats voor getallen (ex: 12543 tot 12.543) $ post_url = get_permalink ($ ID); // haal de URL van het huidige bericht in de lus $ title = get_the_title ($ ID); // haal de titel van het huidige bericht in de lus-echo "
    1. $ title - $ views weergaven
    2. "; // echo van de informatie in een lijstitem // de echo van de lus beëindigen"
    "; // sluit de ongeordende lijst af functie ppbv_add_admin_widget () wp_add_dashboard_widget ('popular_by_views', 'Most Popular Posts by Views', 'ppbv_admin_widget'); // maakt een admin gebied widget || wp_add_dashboard_widget ([id of div] , [titel in div], [functie die binnen div gerund wordt]) add_action ('wp_dashboard_setup', 'ppbv_add_admin_widget'); // attach ppbv_add_admin_widget to wp_dashboard_setup function ppbv_display_widget ($ args) global $ wpdb, $ ppbv_tablename; // call global voor gebruik in functie-extract ($ args); // geeft ons de standaardinstellingen van widgets echo $ before_widget; // echoot de container voor de widget || verkregen uit $ args echo $ before_title. "Most Popular by Views". $ after_title; // echoot de titel van de widget || $ before_title / $ after_title verkregen uit $ args echo "
      "; // maak een geordende lijst $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY-weergaven DESC LIMIT 0,10 ", ARRAY_N); // Bestel onze tabel op grootst van kleinste afbeeldingen en krijg dan de eerste 10 (dwz de top 10 meest bekeken) foreach ($ popular als $ post) // doorlopen de geretourneerde array van populaire berichten $ ID = $ post [1]; // sla de gegevens op in een variabele om een paar karakters en houd de code schoner $ views = number_format ($ post [2]); // number_format voegt de komma's op de juiste plekken voor nummers toe (ex: 12543 tot 12.543) $ post_url = get_permalink ($ ID); // krijg de URL van het huidige bericht in de lus $ title = get_the_title ($ ID); // haal de titel van het huidige bericht in de lus-echo "
    1. $ title - $ views weergaven
    2. "; // echo van de informatie in een lijstitem // de echo van de lus beëindigen"
    "; // sluit de geordende lijst echo $ after_widget; // sluit de container || verkregen uit $ args wp_register_sidebar_widget ('popular_by_views', 'Most Popular Posts by Views', 'ppbv_display_widget'); // voeg de widget toe aan de selecteer menu || wp_register_sidebar_widget ([id van de optie], [titel van de optie], [functie om uit te voeren vanuit de widget])) functie ppbv_display () global $ wpdb, $ ppbv_tablename; // call global voor gebruik in functie echo "
    "; // een container-echo maken"

    Meest populair op weergaven

    "; // schrijf de titel echo"
      "; // maak een geordende lijst $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY-weergaven DESC LIMIT 0,10 ", ARRAY_N); foreach ($ popular as $ post) // loop via de geretourneerde reeks populaire berichten $ ID = $ post [1]; // sla de gegevens op in een variabele om een ​​paar tekens op te slaan en houd de code schoner $ views = number_format ($ post [2]); // number_format voegt toe de komma's op de juiste plekken voor getallen (bijv. 12543 tot 12.543) $ post_url = get_permalink ($ ID); // haal de URL van het huidige bericht in de lus $ title = get_the_title ($ ID); // verkrijg de titel van het huidige bericht in de loop-echo "
    1. $ title - $ views weergaven
    2. "; // echo van de informatie in een lijstitem // de echo van de lus beëindigen"
    "; // sluit de geordende lijst echo"
    "; // de container sluiten?>