Cadrul de clasă OOP al unui începător

OOP este standard pentru un cod excelent, este flexibil, scalabil și extensibil. Dezvoltatorii WordPress au nevoie de un cadru pe care să se bazeze codul lor, ceva care poate fi ușor ported la alte proiecte pentru a salva inventarea roții de două ori pe săptămână. Este vorba de lucru mai inteligent, nu mai greu!

Nu este nimic mai rău decât activarea unui plugin pentru a descoperi că omoară site-ul dvs., deoarece doi autori de plugin-uri au o funcție globală numită initialise () !

Tot codul are nevoie de un scop, nu ar trebui să începeți niciodată să scrieți ceva (Carte, Plugin, Temă sau Tutorial!) Fără un scop clar și definit de unde vreți să mergeți.

Pentru acest tutorial, vom folosi o clasă OOP de bază pentru a face următoarele într-un plugin.

  1. Obțineți linkuri către paginile copil ale paginii curente
  2. Salvați șirul HTML din memoria PHP pentru a salva regenerarea HTML mai mult decât o dată, dacă trebuie să afișăm legăturile de două ori
  3. Definiți acest lucru într-un scurtcod pentru a salva în jurul valorii de codul sursă temă

Pasul 1 Începeți crearea clasei

Să începem prin a crea o clasă goală cu nimic altceva decât o funcție de constructor și o instanțializăm într-o variabilă globală (aceasta este foarte cool, o să explic mai târziu!)

 

Pasul 2 Începeți funcția de delegare

Apoi, începem să delegăm funcționalități de la constructor, să definim câteva căi de plugin și să creăm funcții separate pentru a adăuga acțiuni de cârlig în WordPress, toate apelate automat de la constructorul de clasă.

 plugin_defines (); $ This-> setup_actions ();  / ** * Definește a fi folosit oriunde în WordPress după ce plugin-ul a fost inițiat. * / funcția plugin_defines () define ('MY_PLUGIN_PATH', trailingslashit (WP_PLUGIN_DIR. '/'. str_replace (basename (__FILE__), '', plugin_basename (__FILE__))); defineste ('MY_PLUGIN_URL', trailingslashit (WP_PLUGIN_URL. '/'. str_replace (bazename (__FILE__), '', plugin_basename (__FILE__)));  / ** * Configurați acțiunile pentru a fixa pluginul în WordPress în locurile corespunzătoare * / function setup_actions ()  // Engage. $ OOP_Class = OOP_Class (); ?>

Pasul 3 Elaborarea unor acțiuni

Acest lucru arată bine până acum, este totul de configurare, dar într-adevăr nu face prea multe încă. Să continuăm cu funcționalitatea necesară.

Configurați pluginurile pluginului de la template_redirect

 // Face ceva pe template_redirect, poate enqueue unele script-uri în timp ce nu în admin? dacă (! is_admin ()) $ this-> plugin_enqueues (); 

Și funcția plugin_enqueues funcționează:

 / ** * Folosit pentru a încorpora stilurile și scripturile necesare pluginului. * / funcția plugin_enqueues () / / Enqueue jQuery wp_enqueue_script ('jquery'); // Init scriptul nostru wp_enqueue_script ('plugin_init', MY_PLUGIN_URL. 'Js / init.js', array ('jquery')); // Unele stiluri de bază: wp_enqueue_style ('plugin_style', MY_PLUGIN_URL. 'Css / pluginstyles.css'); 

Configurați o variabilă de clasă înaintea constructorului (doar pentru a păstra totul curat).

 // Legăturile către paginile copilului. Fals în mod implicit. var $ child_page_links = false;

Definiți funcția pentru a prelua legăturile de pagină de tip copil și pentru a seta codul HTML în obiect.

 / ** * Setează variabila link-uri de pagină copii din această clasă. * / set_child_page_links () global $ post; // Obțineți paginile copiilor paginii curente $ children = get_pages (array ('child_of' => $ post-> ID)); dacă (! gol ($ copii)): $ out = '
„; // Faceți buclă prin paginile copil, generând câteva coduri HTML cu imaginea, linkul și titlul paginii copil. foreach ($ copii ca $ copil) $ img = get_the_post_thumbnail ($ child-> ID, 'thumbnail'); $ title = $ copil-> post_title; $ url = get_permalink ($ copil-> ID); $ out = '
„; $ out. = ''. $ img. '". esc_html (titlul $). '„; $ out = '
„; $ out. = '
„; altfel: // Nu avem copii, trebuie să reușim să ne ocupăm de asta. $ out = false; endif; $ this-> child_page_links = $ out;

Și rulați-o din funcția template_redirect

 // Numai pe o pagină. dacă (is_page ()) $ this-> set_child_page_links (); 

Pasul 4 Configurarea codului scurt și șablonului!

Aici începe să se răcească, deoarece codul nostru scurt nu va avea vreo opțiune, putem folosi ceea ce se numește "getter", care returnează pur și simplu variabila de clasă.

 / ** * Getter pentru link-urile de pagina copil * / function return_child_pages () return $ this-> child_page_links; 

Această funcție poate fi cuplată în API-ul de coduri scurte, așa cum este cazul:

 add_shortcode ('Child_Pages', array ($ this, 'return_child_pages'));

De asemenea, pentru că am instanțiat toate acestea pe template_redirect, nu este nevoie să regenerăm legăturile, putem doar să le scuipăm oriunde, după cum urmează:

 child_page_links) echo $ OOP_Class-> child_page_links; ?>

Pasul 5 Destul de sus

Și fragmentul JavaScript. (Aceasta merge în js / init.js în dosarul nostru de plugin). Acest lucru scoate în evidență legătura cu mouse-ul și întreabă permisiunea utilizatorului de a continua cu pagina copilului.

 jQuery (document) .ready (funcția ($) $ ('.child_page a') .click (funcția () if (confirmați (" ; else return (false)) hover () $ (this) .css (' stil ');)););

Nu în ultimul rând, unele stiluri CSS de bază pentru plugin-ul nostru (/css/pluginstyles.css).

 .child_page_wrapper .child_page float: left; lățime: 33% .child_page_wrapper .child_page a display: bloc;  .child_page_wrapper .child_page span afișare: bloc; text-align: centru;  .child_page_wrapper .child_page img afișare: bloc; marja: 0 auto; 

Învelire

Această clasă poate fi utilizată în aproape orice situație și este potrivită (dar fără a se limita la ea) pentru utilizarea în cadrul sistemului WordPress. Poate fi folosit o singură dată pentru o temă și apoi o altă configurație de clasă pentru o anumită funcționalitate integrată (adică putem copia / lipi ușor funcționalitatea individuală de la proiect la proiect cu ușurință) și apoi din nou pentru un plugin personalizat rapid pentru acea funcționalitate rece clientul tău nevoi care sunt în mod exagerat în plugin-urile disponibile.

Dacă este scris ca fiind "secțiuni" independente ale site-ului, atunci clasele ar putea fi ușor ridicate pentru următorul dvs. proiect, făcând funcționalitatea avansată rapidă și ușoară pentru dvs.!

Deși nu am atins nici măcar potențialul clasei și al obiectelor, acesta este un început bun pentru înțelegerea flexibilității și extinderii PPE.

De asemenea, feriți-vă că stocarea obiectelor în PHP, cum ar fi faptul că nu ocupă memoria PHP, astfel încât să fie folosită deși!!

Cod