Cum de a scrie un Cele mai populare prin vizualizări WordPress Plugin

În timp ce continuați să scrieți pentru WordPress din ce în ce mai mult, nivelul de dificultate și complexitatea pluginurilor dvs. va ajunge în cele din urmă cu mult mai mult decât manipularea simplă a datelor, așa cum sa demonstrat în articolul nostru începător. În această tranșă vom acoperi în detaliu: interacțiunea bazei de date, widget-urile Admin și widget-urile Sidebar. Exemplul de astăzi va fi un plugin personalizat "Most Popular by Views", care creează un widget pentru zona de administrare pentru noi și un widget lateral pentru vizitatori.


Pasul 0. Ce va face?

Înainte de a ne deschide IDE-ul sau de a scrie orice cod, trebuie să scrieți întotdeauna o listă a funcțiilor pe care plugin-ul dvs. le va avea și nu le va avea (cel puțin în faza inițială, puteți întinde întotdeauna mai târziu). Pentru pluginul "Cele mai populare după vizualizări", principala noastră caracteristică este afișarea unei liste cu cele mai populare postări (vom spune, top 10). În al doilea rând, vom pune și lista în zona de administrare ca un fel de analiză low-tech. În cele din urmă, vom oferi dezvoltatorilor opțiunea de ao afișa oriunde, făcând-o disponibilă ca widget bara laterală și printr-o funcție simplă.

Caracteristici:

  • Creează o listă cu primele zece posturi cele mai populare pe baza vizionărilor
  • Lista este afișată în zona Administrare ca o analiză low-tech
  • Lista este disponibilă atât ca widget, cât și ca funcție a barei laterale

Pasul 1. Baza de date

Înainte de a putea afișa cele mai populare postări, trebuie să colectăm date despre posturile care sunt vizionate și cât de des, dar chiar înainte de a putea face acest lucru, avem nevoie de undeva pentru a pune toate aceste date. În interiorul unui nou fișier de plugin, să creați o nouă funcție (ppbv_create_table) care va verifica dacă tabela noastră există. Dacă nu, o vom crea. Metoda noastră de a face acest lucru este destul de simplă; vom folosi $ wpdb-> get_results pentru a rula o instrucțiune SQL care verifică un tabel numit "wp_popular_by_views". Dacă nu găsește masa, rezultatele get_results se vor întoarce la zero. Dacă este cazul, vom folosi interogarea $ wpdb-> pentru a scrie în noul tabel. Funcționăm această funcție de fiecare dată când plugin-ul este activat.

 prefix.'popular_by_views'; // combinați prefixul cu funcția noastră de nume de tabel ppbv_create_table () global $ wpdb, $ ppbv_tablename; // apelați la nivel global pentru a le putea folosi în cadrul funcției $ ppbv_table = $ wpdb-> get_results ("SHOW TABLES LIKE '$ ppbv_tablename", ARRAY_N); // returneaza null daca nu are rezultate daca (is_null ($ ppbv_table)) // daca nu avem o tabela $ create_table_sql = "CREATE TABLE $ ppbv_tablename (id BIGINT (50) NOT NULL AUTO_INCREMENT, post_id VARCHAR ) NOT NULL, vizualizări BIGINT (50) NOT NULL, KEY PRIMARY (id), UNIQUE (id)); "; // fii atent la sintaxa SQL, poate fi foarte finiky $ wpdb-> interogare ($ create_table_sql); // rulați instrucțiunea SQL din baza de date register_activation_hook (__FILE __, 'ppbv_create_table'); // rulați funcția "ppbv_create_table" la activarea pluginului?>

Pasul 2. Prinderea datelor

Următorul lucru pe care trebuie să-l facem, acum că avem o masă pentru a stoca datele noastre, este prinde datele noastre. Vom crea o nouă funcție (ppbv_page_viewed) pe care le vom atașa la wp_head cârlig, astfel încât să ruleze la încărcarea fiecărei pagini. În interiorul acestei funcții vom face unul dintre cele două lucruri, după ce vom verifica dacă pagina curentă este deja în baza de date: creșteți vizualizările sale cu una sau, dacă nu este în baza de date, adăugați-o în baza de date. Pentru a afla dacă pagina curentă este deja în baza de date, vom folosi $ postare obiect pentru a obține "post_ID". Acest pas este foarte simplu, pentru că nu colectăm date complicate; comentariile din acest cod oferă un pas detaliat pas cu pas în acest proces.

 funcția ppbv_page_viewed () if (is_single () &&! is_page ()) // rulează numai pe postări și nu pagini globale $ wpdb, $ post, $ ppbv_tablename; // apel global pentru a fi utilizat în funciton $ wpdb-> flush (); // clense interfața DB $ data = $ wpdb-> get_row ("SELECT * FROM $ ppbv_tablename WHERE post_id =" $ post-> ID "", ARRAY_A); // obține rândul de date care are ID-ul corespunzător postului dacă (! is_null ($ data)) // dacă avem un rând de date corespunzător $ new_views = $ data ['views'] + 1; // crește afișările cu 1 $ wpdb-> interogare ("UPDATE $ ppbv_tablename SET vizualizări =" $ new_views "WHERE post_id =" $ post-> ID "; // actualizați rândul de date cu noile vizualizări $ wpdb-> flush (); // clense interfața DB altceva // dacă nu avem un rând de date de potrivire (nu sa văzut încă postul) $ wpdb-> interogare ("INSERT INTO $ ppbv_tablename (post_id, vizualizări) VALUES (' $ post-> ID“, '1');"); // adăugați un nou rând de date în DB cu ID-ul postului și 1 vedeți $ wpdb-> flush (); // clense interfața DB add_action ('wp_head', 'ppbv_page_viewed'); // atașați ppbv_page_viewed la cârligul wp_head 

Pasul 3. Crearea widgetului de administrator

În continuare, vom folosi datele pe care tocmai le-am adăugat în baza noastră de date pentru a crea o listă ordonată în interiorul unei Widget-uri Dashboard Dashboard. Acest proces implică două funcții: primul (ppbv_admin_widget) pentru a genera totul în interiorul widget-ului, iar al doilea (ppbv_add_admin_widget) pentru a crea widget-ul în sine. Să începem cu funcția de conținut, pppbv_admin_widget. În primul rând, din moment ce facem o listă ordonată, să reluăm etichetele de deschidere pentru asta. Apoi, vom globaliza $ wpdb și $ ppbv_tablename vars, astfel încât să putem accesa baza de date și să preluăm ID-urile celor zece cele mai vizionate postări. Apoi vom rula matricea întoarsă prin a pentru fiecare și utilizați fiecare identificator individual pentru a construi un element de listă și pentru a crea un link către acea pagină, în timp ce tipăriți și vizualizările sale (formatate cu formatul numeric pentru a face mai ușor de citit).

 funcția ppbv_admin_widget () echo "
    "// a crea o listă neordonată globală $ wpdb, $ ppbv_tablename; // apel global pentru a fi utilizat în funcția $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename "ORDER BY views DESC LIMIT 0,10", ARRAY_N); // Comandați tabelul nostru de la cea mai mare la cea mai mică vizualizare, apoi obțineți primele 10 (adică cele mai mari 10 cele mai vizionate) foreach ($ popular ca $ post) // bucla prin matricea returnată de posturi populare $ ID = $ post [1]; // salvați datele într-o variabilă pentru a salva câteva caractere și păstrați codul mai curat $ views = number_format ($ post [2]); // numărul_format adaugă virgulele în locurile potrivite pentru numere (ex: 12543 la 12,543 $ $ post_url = get_permalink ($ ID); // obțineți adresa URL a postării curente în buclă $ title = get_the_title ($ ID); // obțineți titlul postului curent în buclă echo "
  1. $ title - $ views
  2. "; // redați informațiile dintr-o listă-element / / închideți echo-ul bucla"
"; // închideți lista neordonată

Acum, când generăm conținut, să creăm widget-ul. În interiorul funcției de creare, ppbv_add_admin_widget, vom apela o altă funcție nativă la WordPress: wp_add_dashboard_widget. Tot ce trebuie să facem este să dăm wp_add_dashboard_widget următorii parametri: [idul containerului], [titlul în container], [funcția de conținut] (umplutura noastră ca atare: 'popular_by_views', 'Most Popular Posts by Views', 'ppbv_admin_widget „). Ultimul lucru pe care trebuie să-l facem este să atașăm funcția noastră de creare la cârligul wp_dashboard_setup.

 funcția ppbv_add_admin_widget () wp_add_dashboard_widget ('popular_by_views', 'Cele mai populare postări după vizualizări', 'ppbv_admin_widget'); // creează un widget pentru zona adminului || wp_add_dashboard_widget ([id de div], [titlu în div], [funcția de a rula în div]) add_action ('wp_dashboard_setup', 'ppbv_add_admin_widget'); // atașați ppbv_add_admin_widget la wp_dashboard_setup 

Și acum avem un widget pentru tabloul de lucru pentru administratori.


Pasul 4. Crearea widget-ului lateral

Crearea unui widget lateral este destul de nedureroasă; din păcate, anumite părți nu sunt bine documentate (cum ar fi cum să le facem uniforme), dar vom acoperi asta. Să începem prin scrierea unei noi funcții (ppbv_display_widget) și, în interiorul acestuia, vom copia funcția noastră de conținut din widget-ul de administrare (vă sugerăm să mutați apelurile globale în partea de sus, în afara

    echo, a funcției de claritate mai târziu). Apoi următorul pas este să vă înregistrați widget-ul în WordPress prin wp_register_sidebar_widget (parametrii sunt: ​​[id al containerului], [titlul paginii widget], [content function] || 'popular_by_views', 'Most Popular Posts by Views' 'ppbv_display_widget').

     funcția ppbv_display_widget () global $ wpdb, $ ppbv_tablename; // sunați la nivel global pentru utilizarea în ecou de funcții "
    "; // crea un ecou container"

    Cele mai populare după vizualizări

    "; / / scrieți ecoul titlului"
      "; // crea o listă ordonată $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY vizualizări DESC LIMIT 0,10 ", ARRAY_N); foreach ($ popular ca $ post) // loop prin matricea returnată de postări populare $ ID = $ post [1]; // stocați datele într-o variabilă pentru a salva câteva caractere și păstrați codul mai curat $ views = number_format ($ post [2]); // number_format adds (de exemplu, 12543 până la 12.543) $ post_url = get_permalink ($ ID); // obțineți adresa URL a postării curente în buclă $ title = get_the_title ($ ID); // obțineți titlul din postul curent în ecou bucla "
    1. $ title - $ views
    2. "; // redați informațiile dintr-o listă-element / / închideți echo-ul bucla"
    "; // închideți ecoul listei ordonate"
    "/ // închideți containerul wp_register_sidebar_widget ('popular_by_views', 'Most Popular Posts by Views', 'ppbv_display_widget'); // adăugați widgetul la meniul select || wp_register_sidebar_widget ([id al opțiunii] opțiunea], [funcția de a rula de la widget]))

    Acesta este de fapt minimul minim necesar pentru un widget lateral al barei laterale, dar ce 90% din toate barele laterale dinamice au anumite setări aplicate cu privire la modul în care widgeturile sunt desenate, deci să ne conformăm widget-ului cu aceste setări. Primul lucru pe care trebuie să-l facem este să adăugăm un parametru funcției noastre ppbv_display_widget, $ args. Prin adăugarea acestui parametru în interiorul funcției, utilizând funcția de extragere de pe ea, obținem acces la mai multe variabile care vor permite ca plugin-ul nostru să fie identic cu restul widget-urilor din bara laterală.

    "Nu trebuie să furnizăm niciun fel de contribuție pentru argumentele $, WordPress va face asta pentru noi".

    Datorită $ args și extras, avem acum acces la următoarele variabile pe care le putem echivala cu stilul widget-ului nostru:

    • $ before_widget
    • $ after_widget
    • $ before_title
    • $ after_title
     funcția ppbv_display_widget ($ args) global $ wpdb, $ ppbv_tablename; // apel global pentru a fi utilizat în extras de funcții ($ args); // ne dă setările implicite pentru widget-uri ecou $ before_widget; // echostează containerul pentru widget || obținut din $ args echo $ before_title. "Most Popular by Views" $ after_title; // echoaza titlul widgetului || $ before_title / $ after_title obținut de la $ args echo "
      "; // crea o listă ordonată $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY vizualizări DESC LIMIT 0,10 ", ARRAY_N); // Comandați tabelul nostru de la cele mai mari la cele mai mici primele 10 (adică primele 10 cele mai vizualizate) foreach ($ popular ca $ post) // buclă prin matricea returnată de postări populare $ ID = $ post [1]; // stocarea datelor într-o variabilă pentru a salva o ($ post [2]); // numărul_format adaugă virgulele în locurile potrivite pentru numere (ex: 12543 - 12,543) $ post_url = get_permalink ($ ID); // get URL-ul postului curent din buclă $ title = get_the_title ($ ID); // obțineți titlul postului curent în buclă echo "
    1. $ title - $ views
    2. "; // redați informațiile dintr-o listă-element / / închideți echo-ul bucla"
    "; // închide lista ordonată echo $ after_widget; // închide containerul || obținut de la $ args

    Pasul 5. Funcția non-widget

    Nu toată lumea care folosește acest plugin va dori să utilizeze widget-ul, deci este imperativ să le oferim o altă metodă de afișare a listei noastre. Din fericire, este la fel de simplu ca și clonarea funcției noastre ppbv_display_widget și eliminarea părților widgetului, înlocuindu-le cu codul HTML standard hard.

     funcția ppbv_display () global $ wpdb, $ ppbv_tablename; // sunați la nivel global pentru utilizarea în ecou de funcții "
    "; // crea un ecou container"

    Cele mai populare după vizualizări

    "; / / scrieți ecoul titlului"
      "; // crea o listă ordonată $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY vizualizări DESC LIMIT 0,10 ", ARRAY_N); foreach ($ popular ca $ post) // loop prin matricea returnată de postări populare $ ID = $ post [1]; // stocați datele într-o variabilă pentru a salva câteva caractere și păstrați codul mai curat $ views = number_format ($ post [2]); // number_format adds (de exemplu, 12543 până la 12.543) $ post_url = get_permalink ($ ID); // obțineți adresa URL a postării curente în buclă $ title = get_the_title ($ ID); // obțineți titlul din postul curent în ecou bucla "
    1. $ title - $ views
    2. "; // redați informațiile dintr-o listă-element / / închideți echo-ul bucla"
    "; // închideți ecoul listei ordonate"
    "; // închideți recipientul

    Concluzie

    Asta-i băieți, ți-ai făcut cu succes propriul plugin "Cel mai popular prin vizualizări" WordPress. Nu prea tare, a fost?

    Când ați reușit să dezvoltați modul de dezvoltare a plugin-ului WordPress, opriți-vă de CodeCanyon.net și începeți vânzarea pluginurilor pentru profit!

    Vizualizați codul sursă final cu comentariile?

     prefix.'popular_by_views'; // combinați prefixul cu funcția noastră de nume de tabel ppbv_create_table () global $ wpdb, $ ppbv_tablename; // apelați la nivel global pentru a le putea folosi în cadrul funcției $ ppbv_table = $ wpdb-> get_results ("SHOW TABLES LIKE '$ ppbv_tablename", ARRAY_N); // returneaza null daca nu are rezultate daca (is_null ($ ppbv_table)) // daca nu avem o tabela $ create_table_sql = "CREATE TABLE $ ppbv_tablename (id BIGINT (50) NOT NULL AUTO_INCREMENT, post_id VARCHAR ) NOT NULL, vizualizări BIGINT (50) NOT NULL, KEY PRIMARY (id), UNIQUE (id)); "; // fii atent la sintaxa SQL, poate fi foarte finiky $ wpdb-> interogare ($ create_table_sql); // rulați instrucțiunea SQL din baza de date $ wpdb-> flush (); // clense interfața DB register_activation_hook (__ FILE __, 'ppbv_create_table'); // executați funcția "ppbv_create_table" la funcția de activare a pluginului ppbv_page_viewed () if (is_single () &&! is_page ()) // se execută numai pe postări și nu pe pagini globale $ wpdb, $ post, $ ppbv_tablename; // apel global pentru a fi utilizat în funciton $ wpdb-> flush (); // clense interfața DB $ data = $ wpdb-> get_row ("SELECT * FROM $ ppbv_tablename WHERE post_id =" $ post-> ID "", ARRAY_A); // obține rândul de date care are ID-ul corespunzător postului dacă (! is_null ($ data)) // dacă avem un rând de date corespunzător $ new_views = $ data ['views'] + 1; // crește afișările cu 1 $ wpdb-> interogare ("UPDATE $ ppbv_tablename SET vizualizări =" $ new_views "WHERE post_id =" $ post-> ID "; // actualizați rândul de date cu noile vizualizări $ wpdb-> flush (); // clense interfața DB altceva // dacă nu avem un rând de date de potrivire (nu sa văzut încă postul) $ wpdb-> interogare ("INSERT INTO $ ppbv_tablename (post_id, vizualizări) VALUES (' $ post-> ID“, '1');"); // adăugați un nou rând de date în DB cu ID-ul postului și 1 vedeți $ wpdb-> flush (); // clense interfața DB add_action ('wp_head', 'ppbv_page_viewed'); // atașați ppbv_page_viewed la funcția wp_head hook ppbv_admin_widget () echo "
      "// a crea o listă neordonată globală $ wpdb, $ ppbv_tablename; // apel global pentru a fi utilizat în funcția $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename "ORDER BY views DESC LIMIT 0,10", ARRAY_N); // Comandați tabelul nostru de la cea mai mare la cea mai mică vizualizare, apoi obțineți primele 10 (adică cele mai mari 10 cele mai vizionate) foreach ($ popular ca $ post) // bucla prin matricea returnată de posturi populare $ ID = $ post [1]; // salvați datele într-o variabilă pentru a salva câteva caractere și păstrați codul mai curat $ views = number_format ($ post [2]); // numărul_format adaugă virgulele în locurile potrivite pentru numere (ex: 12543 la 12,543 $ $ post_url = get_permalink ($ ID); // obțineți adresa URL a postării curente în buclă $ title = get_the_title ($ ID); // obțineți titlul postului curent în buclă echo "
    1. $ title - $ views
    2. "; // redați informațiile dintr-o listă-element / / închideți echo-ul bucla"
    "[// închide lista neordonată funcția ppbv_add_admin_widget () wp_add_dashboard_widget ('popular_by_views', 'Most Popular Posts by Views', 'ppbv_admin_widget' , [title in div], [funcția de a rula în interiorul lui div]) add_action ('wp_dashboard_setup', 'ppbv_add_admin_widget'); apel global pentru utilizarea în extras de funcții ($ args); // ne dă setările implicite pentru widget-uri echo $ before_widget; // echo containerul pentru widgetul || obținut de la $ args echo $ before_title "Most Popular by Views". $ after_title; // echoaza titlul widgetului || $ before_title / $ after_title obținut de la $ args echo "
      "; // crea o listă ordonată $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY vizualizări DESC LIMIT 0,10 ", ARRAY_N); // Comandați tabelul nostru de la cele mai mari la cele mai mici primele 10 (adică primele 10 cele mai vizualizate) foreach ($ popular ca $ post) // buclă prin matricea returnată de postări populare $ ID = $ post [1]; // stocarea datelor într-o variabilă pentru a salva o ($ post [2]); // numărul_format adaugă virgulele în locurile potrivite pentru numere (ex: 12543 - 12,543) $ post_url = get_permalink ($ ID); // get URL-ul postului curent din buclă $ title = get_the_title ($ ID); // obțineți titlul postului curent în buclă echo "
    1. $ title - $ views
    2. "; // redați informațiile dintr-o listă-element / / închideți echo-ul bucla"
    "// închide lista ordonată echo $ after_widget; // închide containerul || obținut de la $ args wp_register_sidebar_widget ('popular_by_views', 'Most Popular Posts by Views', 'ppbv_display_widget'); // adăugați widget-ul la selectați meniul || wp_register_sidebar_widget ([id al opțiunii], [titlul opțiunii], [funcția de a executa din widget])) ppbv_display () global $ wpdb, $ ppbv_tablename; ecou "
    "; // crea un ecou container"

    Cele mai populare după vizualizări

    "; / / scrieți ecoul titlului"
      "; // crea o listă ordonată $ popular = $ wpdb-> get_results (" SELECT * FROM $ ppbv_tablename ORDER BY vizualizări DESC LIMIT 0,10 ", ARRAY_N); foreach ($ popular ca $ post) // loop prin matricea returnată de postări populare $ ID = $ post [1]; // stocați datele într-o variabilă pentru a salva câteva caractere și păstrați codul mai curat $ views = number_format ($ post [2]); // number_format adds (de exemplu, 12543 până la 12.543) $ post_url = get_permalink ($ ID); // obțineți adresa URL a postării curente în buclă $ title = get_the_title ($ ID); // obțineți titlul din postul curent în ecou bucla "
    1. $ title - $ views
    2. "; // redați informațiile dintr-o listă-element / / închideți echo-ul bucla"
    "; // închideți ecoul listei ordonate"
    "; // închideți recipientul?>
    Cod