Programarea orientată pe obiecte în WordPress Construirea pluginului II

În articolul precedent din această serie, am început în sfârșit să pregătim fundația pluginului pe care o vom scrie.

Mai exact, am aruncat o privire asupra organizației de fișiere, a componentelor și a detaliilor actuale despre ceea ce va face pluginul. De asemenea, am eliminat codul pe care îl vom completa în acest tutorial.

În plus față de a face plugin-ul nostru de fapt să facă ceva, vom vorbi despre o serie de principii, tehnici și idei orientate spre obiecte, pe măsură ce lucrăm prin intermediul pluginului. 

Rețineți că în acest tutorial vom face o foarte mică documentație. Am acoperit detaliile despre acest lucru în articolul precedent; totuși, vom vorbi Mai Mult despre acest lucru în articolul care urmează după acesta.

Ca și restul articolelor din această serie, vă rugăm să fiți siguri că ați prins tot ce am acoperit până acum în serie, deoarece tot ceea ce facem se bazează pe subiectele anterioare.

Pentru referință, am abordat:

  1. O introducere
  2. Clase
  3. Tipuri
  4. Structuri de control: declarații condiționate
  5. Structuri de control: buclă
  6. Funcții și atribute
  7. domeniu
  8. Construirea Pluginului I

Cu asta a spus, să ridicăm unde am rămas.

Unde începem?

Când vine vorba de scrierea de software - indiferent de paradigma care este folosită - nu se face așa într-un mod liniar. Aceasta înseamnă că nu neapărat scriem la punctul de plecare al programului. Adesea ori - deși nu întotdeauna - ar putea fi una din cele două părți care avem dreptate.

Cu acest lucru, vom începe să lucrăm la fiecare fișier care alcătuiesc plugin-ul într-un mod care are sens atunci când lucrăm prin plugin. Prin aceasta, vreau să spun că, pe măsură ce lucrăm prin acest articol, lucrurile pot părea împrăștiate la început, dar ar trebui, sperăm, să devină un pic mai clare pe măsură ce privim fiecare dosar.

Încărcătorul

Prima clasă pe care o vom finaliza se află în include / clasa-un singur post-meta-manager-loader.php. Dacă vă reamintiți din articolul precedent, această clasă este responsabilă pentru coordonarea acțiunilor și a filtrelor între plugin-ul principal și clasa de administrare.

Într-un sens, acesta oferă un wrapper în jurul valorii de API-urile cârligului nativ WordPress; totuși, ne permite să descompunem (și, astfel, să impunem o separare a preocupărilor) clasele noastre, astfel încât fiecare să se poată specializa pe un anumit scop.

În primul rând, să aruncăm o privire la clasă:

acțiuni = array (); $ this-> filtre = array ();  funcția publică add_action ($ hook, $ component, $ callback) $ this-> actions = $ this-> add ($ this-> acțiuni, $ hook, $ component, $ callback);  funcția publică add_filter ($ hook, $ component, $ callback) $ this-> filters = $ this-> add ($ this-> filtre, $ hook, $ component, $ callback);  funcția privată adăugați ($ hooks, $ hook, $ component, $ callback) $ hooks [] = array ('hook' => $ hook, 'component' => $ component; întoarcere $ cârlige;  funcția publică funcția () foreach ($ this-> filtre ca $ hook) add_filter ($ hook ['hook'], array ($ hook ['component'];  foreach ($ this-> acțiuni ca $ hook) add_action ($ hook ['hook'], array ($ hook ['component'], $ hook ['callback'])); 

În acest moment din serie, ar trebui să observați mai multe lucruri cheie despre clasă pe baza discuțiilor pe care le-am avut până acum în serie.

  • Sunt două protejat atribuțiile la care se face referire matrice așa cum este definit în constructor. Una este destinată acțiunilor, iar cealaltă pentru filtre.
  • Sunt două public funcții. Una este concepută pentru a adăuga cu ușurință acțiuni, cealaltă este proiectată pentru a adăuga cu ușurință filtre. Rețineți că fiecare acceptă trei componente: numele cârligului, obiectul principal care are funcția de a fi apelat și funcția care trebuie apelată în timpul executării efective a cârligului. Pentru mai multe informații despre acțiuni și filtre, consultați această referință.
  • Apoi, avem un a privat funcția care este utilizată pentru a simplifica cele două public funcții astfel încât să avem un singur loc pentru a adăuga cârligul la matricea potrivită.
  • În cele din urmă, avem a alerga funcția este cea utilizată pentru a sârmă toate cârligele definite. Aceasta este ceea ce va înregistra toate funcțiile personalizate cu WordPress.

Pe măsură ce continuăm să construim restul pluginului, vom vedea această clasă specială în uz.

Tabloul de bord al administrației

Această parte a pluginului conține toate fișierele care se află în admin director. Dacă vă amintiți din articolul precedent, avem o clasă primară, o foaie de stil și un singur fișier utilizat pentru a reda vizualizarea conținutului.

Vom analiza fiecare dintre aceste fișiere, pentru a le utiliza, începând cu clasa de administrare de bază.

Administrator unic Post Meta Manager

Aceasta este clasa de bază responsabilă pentru înregistrarea foilor de stil, a căsuței meta și a fișierului care va reda conținutul casetei meta.

Să aruncăm o privire la codul complet și apoi vom examina ce face.

versiune = $ versiune;  funcția publică enqueue_styles () wp_enqueue_style ('single-post-meta-manager-admin', plugin_dir_url (__FILE__) versiune, FALSE);  funcția publică add_meta_box () add_meta_box ('single-post-meta-manager-admin', 'single post Meta Manager', array ('this', 'render_meta_box'), 'post', 'normal') ;  funcția publică render_meta_box () require_once plugin_dir_path (__FILE__). 'Amprente parțiale / un singur post-meta-manager.php'; 

Aceasta este o clasă relativ simplă care presupune că sunteți familiarizat cu wp_enqueue_style și add_meta_box. Dacă nu, revizuiți articolele legate și apoi reveniți la acest post.

Apoi, să aruncăm o privire la ceea ce face restul clasei:

  • Rețineți că există a privat atribut care este folosit pentru a urmări versiunea pluginului. Această valoare este trecută în constructorul clasei și este utilizată în primul rând pentru a ne asigura că includem cea mai recentă versiune a plugin-ului atunci când enqueueze foile de stil pentru a ne asigura că bustăm orice fișiere care pot fi stocate în cache atunci când rulează acest plugin.
  • Apoi, avem un a public funcția utilizată pentru a înregistra foaia de stil asociată cu tabloul de bord și avem o funcție publică utilizată pentru a adăuga o casetă meta post introduceți tabloul de bord.
  • În cele din urmă, avem o altă funcție publică (care este chemată tehnic de la în această clasă) pentru a face conținutul casetei meta. Conținutul acestui fișier se află într-un fișier extern pe care îl vom examina momentan.

Deși vom vedea totul în detaliu mai târziu mai târziu, puteți începe să observați că funcția care enquează foile de stil nu este menționată în altă parte. Aici este locul unde Încărcător clasa va intra în cele din urmă în joc.

Un singur post Meta Manager parțial

Unii dezvoltatori doresc să scrie marcajele pentru vizualizările meta-box în PHP și să le stocheze în șiruri foarte lungi. 

Nu sunt un fan al acestei abordări, deoarece vizualizările (sau partiale sau șabloane, sau orice doriți să le numiți) și utilizate în mod obișnuit pentru a afișa date și, prin urmare, constau în mai mult markup decât orice altceva. În acest scop, cred că ar trebui să fie propriul dosar.

În acest caz, dorim să avem un fișier care face toate datele meta asociate cu postarea curentă într-un masa element care este conținut în caseta meta.

Marcajul pentru acest fișier arată astfel:

$ post_meta_value) ?>

Deși marcajul și minimul PHP conținut în acest fișier ar trebui să fie relativ auto-explicative, acesta face depinde de cunoștințele dvs. despre get_post_meta și get_the_ID funcții.

Odată ce toate meta-datele postului sunt preluate, vom trece printr-o informație (folosind unul din constructele de buclă pe care le-am acoperit mult mai devreme) și apoi vom afișa atât tasta meta, cât și valoarea.

Simple Post Meta Admin Stiluri

Ultimul lucru pe care trebuie să-l facem pentru conținutul din caseta de meta este să furnizăm stilurile din foaia de stil pe care le-am încorporat în clasa de bază a administratorului.

Pentru a face acest lucru, vom edita css / simplu post-meta-manager.css.

# single-post-meta-manager-date lățime: 100%;  # single-post-meta-manager-date. cheie font-weight: bold; 

Evident, acest lucru este foarte simplu. Acesta nu oferă nimic altceva decât setarea lățimii mesei la 100% din containerul său, iar aceasta indică valorile meta cheie.

Dar asta este suficient pentru ceea ce căutăm să facem acum.

Fișierul Plugin Core

În acest moment, trebuie să definim fișierul plugin-ului principal. Acesta este fișierul care definește versiunea pluginului, slugul plugin-ului (care este folosit în mod normal în internaționalizare, precum și alte caracteristici), instanțiază Loader-ul și care înregistrează toate cârligele necesare cu WordPress.

Să aruncăm o privire asupra codului, apoi să îl revizuim odată ce am definit totul:

plugin_slug = 'un singur post-meta-manager-slug'; $ this-> version = '0.2.0'; $ This-> load_dependencies (); $ This-> define_admin_hooks ();  funcția privată load_dependencies () require_once plugin_dir_path (dirname (__FILE__)). 'Admin / clasa-un singur post-meta-manager-admin.php'; require_once plugin_dir_path (__FILE__). 'Clasă-un singur post-meta-manager-loader.php'; $ acest-> încărcător = nou Single_Post_Meta_Manager_Loader ();  funcția privată define_admin_hooks () $ admin = new Single_Post_Meta_Manager_Admin ($ this-> get_version ()); $ this-> încărcător-> add_action ('admin_enqueue_scripts', $ admin, 'enqueue_styles'); $ this-> încărcător-> add_action ('add_meta_boxes', $ admin, 'add_meta_box');  funcția publică funcțională () $ this-> loader-> run ();  funcția publică get_version () return $ this-> version; 

Clasa conține următoarele atribute:

  • Versiunea care este trimisă în jurul plugin-ului pentru a ajuta nu numai la definirea versiunii curente de lucru, ci și la furnizarea de funcționalități cum ar fi funcționalitatea cache-busting pentru foile de stil.
  • Există un plugin slug, care poate fi utilizat în scopuri de internaționalizare, precum și alte momente când este necesar un identificator unic.
  • O referință la încărcătorul pe care l-am definit mai devreme în acest fișier. 

Atributele de mai sus sunt toate setate în constructor, dar există, de asemenea, apeluri la mai multe alte funcții.

  • load_dependencies este folosit pentru a importa toate fișierele care sunt utilizate în întregul plugin, cum ar fi Admin Manager și Loader.
  • define_admin_hooks este modul în care profităm de Loader pentru a coordona funcțiile definite în clasa noastră de Administratori care încalcă stilurile și meta-box-ul nostru cu WordPress. Acesta este modul în care separăm preocupările pluginului nostru și asigurăm că fiecare clasă are un singur scop.
  • alerga este funcția care pune totul în mișcare, astfel încât toate funcționalitățile plugin-ului să fie difuzate când sunt activate în WordPress.

Cu excepția faptului că încă lipsește o piesă finală: cum de fapt instanțiăm clasa plugin-ului principal și începem procesul?

Plugin Boot Loader

Pentru a face acest lucru, vom profita de un fișier situat în rădăcina directorului plugin. Unii oameni numesc acest fișier de bootstrap, unii îl numesc încărcător de boot, iar alții îl numesc fișierul principal de plugin.

Indiferent ce optați să numiți, acesta este fișierul care se înregistrează cu WordPress și care pune totul în mișcare. Să aruncăm o privire la cod și apoi vom examina ce face după aceea:

alerga();  run_single_post_meta_manager ();

Comentariul de cod din partea de sus a fișierului este responsabil pentru a spune WordPress că pluginul există și care îi oferă suficiente informații despre plugin, astfel încât acesta să poată fi afișat în tabloul de bord.

Prima condiție pe care o vedeți împiedică accesarea directă a fișierului plugin. Aceasta nu este altceva decât o măsură de siguranță pură.

În cele din urmă, suntem convocați require_once pentru a include fișierul plugin principal pe care l-am privit mai sus, apoi definim o funcție și instanțiată Single_Post_Meta_Manager și după care sunăm alerga care este ceea ce pune totul în mișcare.

În cele din urmă, facem apel la funcția pe care am definit-o la sfârșitul dosarului. Acest lucru începe procesul și aduce plugin-ul la viață.

Ce este în continuare?

În acest moment, am finalizat funcționalitatea pluginului nostru; totuși, încă nu am terminat. Mai este încă un lucru pe care trebuie să-l facem pentru a ne asigura că urmărim toate cele mai bune practici care merg într-un plugin și care furnizează documentația.

În următoarea postare, vom lua o pauză de la articolele formularului mai lung de scriere a codului, vom examina standardele de documentare WordPress și apoi vom documenta plugin-ul astfel încât să încheiem complet toate funcționalitățile sale.

În același timp, descărcați plugin-ul de exemplu, explorați modul în care se potrivește totul și asigurați-vă că ați lăsat toate comentariile sau întrebările pe care le aveți despre munca noastră până acum.

Cod