Creați o pagină de setări pentru tema WordPress

Crearea propriei tematici pentru WordPress este o modalitate excelentă de a vă da blogului sau altei site-uri Web propulsate de WordPress o notă originală. Dar nici macar cea mai frumoasa tema nu este atat de placuta daca trebuie sa iesiti sub capota si sa editati codul HTML sau PHP al temei ori de cate ori este timpul sa schimbe anumite aspecte ale acesteia. Mai ales atunci când nu ești doar un client plătitor care folosește tema ta. Din fericire, crearea unui setări pentru că tema dvs. în WordPress nu este foarte greu, iar după ce ați citit acest tutorial, veți putea crea unul în cel mai scurt timp!


Pasul 1 Decideți ce setări sunt necesare

Totul pornește de la necesitate: pentru a crea o pagină de setări clară și utilă, trebuie să dați seama de lucrurile care vor trebui schimbate și să renunțați la orice altceva. Orice nouă setare pe care o adăugați la meniurile de administrare adaugă complexitatea interfeței cu utilizatorul și riscă să fie mai greu de utilizat. De aceea este mai bine să fiți atenți și să selectați opțiunile care urmează să fie schimbate adesea și să lăsați o singură dată personalizări care se pot face cu ușurință schimbând un fișier în interiorul temei.

O altă întrebare care trebuie luată în considerare este: "Cine va schimba aceste setări?" Dacă utilizatorul este familiarizat cu PHP și WordPress, ar putea fi rezonabil să se aștepte ca ea să fie în regulă cu încorporarea codului său Google Analytics în codul însăși, dar nu ar trebui să solicitați acest lucru de la un designer grafic, să nu mai vorbim de un scriitor care nu nici măcar nu trebuie să știi nimic despre HTML și CSS.

Ideile comune pentru lucrurile care trebuie definite în setările temelor includ:

  • Codul de urmărire al site-ului Google Analytics
  • Numărul de bare laterale și poziționarea lor (stânga, dreapta, poate chiar în sus și în jos)
  • Lățimea paginii
  • Conținutul subsolului tău
  • Opțiuni pentru caracteristici specifice temei, cum ar fi formatele de teaser personalizate.

Odată ce ați colectat lista de elemente tematice pe care doriți să le controlați prin intermediul unei pagini de setări, sunteți aproape gata să începeți implementarea. Înainte de a vă deplasa și de a vă crea pagina de setări, puteți economisi timp, asigurându-vă că nu există deja o caracteristică WordPress disponibilă pentru personalizarea pe care o aveți în vedere. Widgeturile, meniurile personalizate, fundalul personalizat și imaginile antetului sunt instrumente utile pentru a face tema personalizabilă cu mult mai puțină muncă decât este necesară pentru crearea propriilor setări. Ele sunt totuși subiecte pentru un tutorial diferit.

Setările create în acest tutorial

Pentru acest tutorial, am visat o pagină principală temă, care constă dintr-o rețea cu un număr diferit de postări recomandate care pot fi selectate, editate și reordonate de admin folosind o pagină de setări personalizate.

În editor, elementele din prima pagină vor fi prezentate ca o listă a elementelor la care se pot adăuga altele noi folosind JavaScript și jQuery.

Îmi place să fiu capabil să previzualizez pagina de administrare în administratorul WordPress când proiectez codul HTML, așa că, de obicei, încep prin a conecta o pagină de setări la WordPress și numai apoi mută la proiectarea conținutului paginii. De aceea, următorul nostru pas este să creați o pagină de setări pentru înlocuitori și să o conectați la WordPress.


Pasul 2 Atingerea paginii cu setări în WordPress

Crearea unei pagini de setări începe prin crearea unei funcții care să stabilească meniul și să o cupleze la acțiunea WordPress admin_menu. Acest lucru îi spune WordPress să vă apeleze funcția atunci când este timpul să creeze meniurile, astfel încât totul să se facă la momentul potrivit. Adăugați acest cod la temele dvs. functions.php fişier:

 funcția setup_theme_admin_menus () // Vom scrie conținutul funcției foarte curând.  // Aceasta îi spune lui WordPress să apeleze funcția numită "setup_theme_admin_menus" // când este momentul să creezi paginile de meniu. add_action ("admin_menu", "setup_theme_admin_menus");

Acum vom pune codul pentru crearea paginilor de setări în interiorul funcției pe care tocmai am creat-o.

Când creați pagina de setări, puteți alege să adăugați pagina sub formă de submeniu la unul dintre grupurile de setări existente sau să creați propriul meniu de nivel superior.

Adăugarea unui submeniu se face cu ajutorul funcției add_submenu_page:

 
  • $ parent_slug este un identificator unic pentru pagina de meniu de sus în care acest submeniu este adăugat ca copil.
  • $ PAGE_TITLE este titlul paginii care urmează să fie adăugată
  • $ menu_title este titlul afișat în meniu (adesea o versiune mai scurtă de $ PAGE_TITLE
  • capacitatea de $ este capacitatea minimă necesară unui utilizator pentru a avea acces la acest meniu.
  • $ menu_slug este un identificator unic pentru meniul care este creat
  • funcţia $ este numele unei funcții care este chemată să manipuleze (și să redea) această pagină de meniu

Dacă alegeți să adăugați pagina de meniu ca submeniu la unul dintre grupurile WordPress, puteți utiliza următoarele valori ca $ parent_slug parametru:

  • Tablou de bord: index.php
  • Mesaje: edit.php
  • Mass-media: upload.php
  • Link-uri: link-manager.php
  • Pagini: edit.php? post_type = pagina
  • Comentarii: edit-comments.php
  • Aspect: themes.php
  • Plugin-uri: plugins.php
  • Utilizatori: users.php
  • Instrumente: tools.php
  • Setări: Opțiuni de-general.php

Grupul Aspect arată ca un bun candidat pentru plasarea paginii noastre de setări. Să încercăm asta și să creăm prima noastră pagină de setări. Iată o versiune actualizată a funcției de configurare a meniului:

 funcția setup_theme_admin_menus () add_submenu_page ('themes.php', 'Front Page Elements', 'Front Page', 'manage_options', 'front-page-elements', 'theme_front_page_settings'); 

Mai trebuie să creăm funcția theme_front_page_settings pentru ca aceasta să funcționeze. Aici este în cea mai simplă formă:

 funcția theme_front_page_settings () echo "Bună ziua, lumea!"; 

Și așa arată în acțiune:

De asemenea, trebuie să verificăm dacă utilizatorul are drepturile necesare pentru editarea paginii cu setări. Pentru aceasta, adăugați următorul cod la începutul funcției paginii de setări:

 // Verificați dacă utilizatorul are dreptul să actualizeze opțiunile dacă (! Current_user_can ('manage_options')) wp_die ('Nu aveți permisiuni suficiente pentru a accesa această pagină.'); 

Acum, dacă un utilizator care nu are permisiunea de a gestiona opțiunile ajunge la pagina cu setări, nu va vedea decât mesajul "Nu aveți permisiuni suficiente pentru a accesa această pagină".

Dacă tema dvs. are nevoie de mai multe pagini de setări, poate fi confuză pentru ca utilizatorul să le caute în jurul structurii de meniu. În acest caz, crearea unui grup propriu de setări facilitează utilizatorului temei să găsească toate paginile de meniu pentru temă.

Pentru a adăuga propriul grup de setări, trebuie să creați o pagină de meniu de nivel superior și să le conectați la paginile submeniului. Iată o nouă versiune a funcției de configurare a meniului. add_menu_page funcția utilizată pentru a crea meniul de nivel superior este similară cu add_submenu_page cu excepția faptului că nu ia $ parent_slug parametru.

 funcția setup_theme_admin_menus () add_menu_page ("Setările temei", "Tema exemplu", "manager_options", "tut_theme_settings", "theme_settings_page"); add_submenu_page ('tut_theme_settings', 'Front Page Elements', 'Front Page', 'manage_options', 'front-page-elements', 'theme_front_page_settings');  // De asemenea, trebuie să adăugăm funcția handler pentru funcția de meniu de nivel superior theme_settings_page () echo "pagina de setări"; 

Dacă testați codul și actualizați administratorul WordPress, veți vedea că noul grup de meniuri apare în partea de jos a listei de meniuri:

Dar ceva nu pare destul de corect încă. Dacă faceți clic pe elementul de meniu superior, nu vă duceți la meniul "Pagina frontală", ci la o pagină de meniu numită "Exemplu temă". Acest lucru nu este în concordanță cu modul în care funcționează celelalte meniuri WordPress, așa că hai să facem încă un lucru: schimbând $ menu_slug atribut în add_submenu_page apelați la aceeași valoare ca în meniul de nivel superior, putem conecta cele două meniuri astfel încât selectarea meniului de sus să selecteze meniul de pe prima pagină:

 funcția setup_theme_admin_menus () add_menu_page ("Setările temei", "Tema exemplu", "manager_options", "tut_theme_settings", "theme_settings_page"); add_submenu_page ('tut_theme_settings', 'Front Page Elements', 'Front Page', 'manage_options', 'tut_theme_settings', 'theme_front_page_settings');  funcție theme_settings_page () 

Arata mai bine. Dacă doriți să îmbunătățiți în continuare aspectul grupului dvs. de meniu, există două câmpuri opționale în add_menu_page funcția pe care o veți găsi utilă. Doar adăugați valorile după numele funcției în apelul metodei:

  • $ icon_url specifică adresa URL a unei pictograme pentru meniul de nivel superior.
  • poziţia $ specifică poziția grupului dvs. de meniuri din lista de meniuri. Cu cât este mai mare valoarea, cu atât este mai mică poziția din meniu.

Pasul 3 Crearea formularului HTML pentru paginile de setări

Acum, că am creat pagina de setări și se arată bine în meniul lateral, este timpul să începeți să adăugați conținut. Deci, să revenim la lista de setări pe care am avut în minte și să redactăm o pagină pentru editarea acestora.

În acest tutorial, avem nevoie de un câmp pentru a defini cât de multe elemente ar trebui să fie listate pe un rând și o listă pentru definirea elementelor reale. Pentru a începe de la mai ușor, să creăm un câmp de text pentru numărul de elemente de pe un rând. Modificați funcția paginii de setări:

 funcția theme_front_page_settings () ?>    

Când reîncărcați pagina de setări, veți vedea primul câmp de setări:

Pentru a face pagina de setări să se potrivească perfect în experiența WordPress și pentru a oferi plugin-ului dvs. o experiență profesională, este o practică optimă să utilizați clasele și stilurile CSS pe care WordPress le folosește în propriile pagini de setări. O modalitate buna de a invata trucurile este sa mergeti mai departe si sa analizati codul sursa WordPress.

Cel mai important lucru este să vă împachetați pagina de setare cu un div cu clasa "Wrap". Înăuntru div puteți utiliza mai multe stiluri predefinite, cum ar fi rubricile, butoanele și câmpurile de formular. Să începem prin stilizarea titlului paginii noastre de setări:

  • Vom crea un h2 poziția pentru pagină (Puteți utiliza etichetele de titlu din h2 la h6 pentru a crea titluri cu dimensiuni diferite.)
  • Vom afișa pictograma paginii cu setările temelor înaintea titlului. (Puteți utiliza pictogramele predefinite WordPress cu screen_icon funcţie. Funcția poate lua unul dintre următorii parametri: index, Editați | ×, încărcați, link-manager, pagini, comentarii, tematică, Plugin-uri, utilizatori, unelte sau opțiuni generale.)
  • Vom pune intrare element în interiorul unei forme și un tabel cu clasa formular-tabel.
 funcția theme_front_page_settings () ?> 

Elemente de pe prima pagină

Apoi, este timpul să începeți adăugarea elementelor.

Pentru a face acest lucru, vom folosi jQuery deoarece face lucrurile mult mai ușor decât scrierea JavaScript de la zero și vine împreună cu WordPress. Dacă ați folosit jQuery înainte, există doar un singur lucru de reținut: $ notația pe care o utilizați în mod normal cu jQuery nu funcționează în WordPress - trebuie să tastați întregul cuvânt, jQuery in schimb.

Mai întâi, vom crea elementul pentru editarea setărilor pentru un bloc de pagină principală pentru a servi drept șablon pentru elementele adăugate de utilizator. Adăugați acest cod chiar între eticheta tabelului de închidere și eticheta formularului de închidere imediat după aceasta.

  
  • Posturi recomandate

    Adăugați postare recomandată
  • Elimina
  • Într-o temă din viața reală este o practică bună să plasați codul dvs. JavaScript într-un fișier separat, dar pentru a face acest tutorial un pic mai ușor de urmărit, acum adaug codul JavaScript în aceeași funcție cu HTML-ul de mai sus, chiar înainte de împacheta div:

     

    Codul JavaScript de mai sus creează o funcție care se numește atunci când utilizatorul face clic pe link-ul cu id add-featured-post. Această funcție clonează elementul de listă de șabloane pe care l-am creat mai devreme și actualizează câmpurile pentru a avea ID-uri unice și nume. În acest fel, toți vor fi trimise în mod corespunzător împreună cu formularul când utilizatorul face clic pe trimite. Variabila elementCounter conține următorul ID de adăugat. Acesta este, de asemenea, salvat într-un câmp ascuns, astfel încât, atunci când formularul este depus, știm cât de multe elemente de pe prima pagină se așteaptă.

    Dacă faceți clic pe linkul "Adăugați postări recomandate" de câteva ori, veți vedea cum se adaugă noi elemente în listă:

    Dar când faceți clic pe linkul eliminați, veți observa că nu se întâmplă nimic. Să adăugăm o funcție pentru eliminarea elementelor din listă:

     funcția removeElement (element) jQuery (element) .remove (); 

    De asemenea, trebuie să apelăm la funcție. Adăugați următorul cod chiar înainte de creșteri elementCounter.

     var removeLink = jQuery ("a", elementRow) .click (funcția () removeElement (elementRow); return false;);

    Înainte de a trece la salvarea formularului, trebuie făcut încă un lucru. Vom folosi pluginul ui.sortable jQuery pentru a face elementele paginii frontale să fie aliniate prin tragerea lor pe pagină. Pentru a activa funcționalitatea de sortare, va trebui să includeți fișierul JavaScript corespunzător (care vine și însoțit de WordPress). Acest lucru se poate face adăugând următoarea linie de cod la sfârșitul secțiunii functions.php:

     dacă (is_admin ()) wp_enqueue_script ('jquery-ui-a se potrivi'); 

    Apoi, vom adăuga următorul cod JavaScript înainte (sau după) jQuery ( "# recomandate add-post"). click funcția definită mai sus.

     jQuery ("li", aceasta). fiecare (functie () setElementId (aceasta, i) ;; elementCounter = i; jQuery ("input [name = element-max-id]");

    Acest fragment face ca lista să fie desemnată și adaugă un eveniment care se numește ori de câte ori utilizatorul termină sortarea. Managerul evenimentelor actualizează toate ID-urile din elemente astfel încât noua comandă să fie păstrată și atunci când salvați formularul (aceasta va deveni mai clară odată ce implementăm salvarea). Când scriu acest handler de oprire, am observat că codul pentru setarea id-ului pentru conținutul șablonului a fost duplicat în două locuri, așa că l-am refactat în funcția sa proprie, pe care am plasat-o chiar în fața liniei jQuery (documentul) .ready ():

     funcția setElementId (element, id) var newId = "front-page-element-" + id; jQuery (element) .attr ("id", newId); var inputField = jQuery ("selectează", element); inputField.attr ("nume", "element-page-id-" + id); var labelField = jQuery ("etichetă", element); labelField.attr ("pentru", "element-page-id-" + id); 

    Prin adăugarea de elemente noi, sortarea acestora și eliminarea acestora, este timpul să treceți la salvarea datelor. Dar înainte de aceasta, adăugați un buton de trimitere chiar înainte de eticheta de închidere a formularului.

     


    Pasul 4 Salvarea formularului

    Pagina de setări arată bine, dar există ceva care lipsește: încă nu face nimic. Este timpul să salvați niște date. WordPress oferă un sistem ușor de salvare a setărilor temei și a plugin-urilor ca perechi cheie de valori la baza de date utilizând două funcții: get_option și update_option. Datele stocate folosind funcțiile pot fi la fel de simple ca o valoare numerică sau la fel de complexă ca o matrice imbricată de mai multe ori.

    Manipularea formularului se face în aceeași funcție pe care o face formularul. Pentru a afla dacă un formular a fost trimis sau nu, adăugăm un câmp ascuns, update_settings la formular și apoi verificați dacă acest câmp a fost trimis sau nu în funcția de manipulare.

     dacă (isset ($ _ POST ["update_settings"])) // Salvează

    Câmpul ascuns care intră în formă arată astfel:

     

    Să începem prin salvarea setării mai ușoare, num_elements. Vom scăpa de atributul pentru a ne asigura că utilizatorul nu trimite conținut rău intenționat în tag-ul HTML și apoi îl salvează în spațiul de stocare a setărilor WordPress. Atunci când se utilizează update_option, nu trebuie să ne facem griji dacă setarea a fost deja salvată sau nu.

     $ num_elements = esc_attr ($ _ POST ["num_elements"]); update_option ("name_name_name_name", $ num_elements);

    Înainte de a trece la salvarea listei, să adăugăm valoarea curentă din num_elements la formatul de setări, astfel încât utilizatorul să vadă întotdeauna valoarea la care a intrat înainte de a decide următoarea valoare. Acest lucru ne va ajuta, de asemenea, să testați că valoarea a fost efectiv salvată.

     

    Și pentru cazurile în care nu am salvat încă nimic, va trebui să încărcăm valoarea curentă din opțiuni, deci să adăugăm acest cod care urmează să fie executat atunci când nu este prezentat niciun formular.

     $ num_elements = get_option ("element_name_name_elemente");

    Atunci când se salvează un formular, este important să informați utilizatorul astfel încât să nu se lase întrebat dacă sa întâmplat ceva sau nu. Deci, să facem un simplu avertisment spunând "Setari Salvate." imediat după update_option:

     ?> 
    Setari Salvate

    Apoi, să salvăm elementele de pe prima pagină. Valoarea cea mai mare a id-ului din elementele primei pagini este transmisă ca Element-max-id, astfel încât putem lua acea valoare și bucla prin elemente până la acel id, salvând datele lor într-un tablou în ordinea corectă:

     $ front_page_elements = array (); $ max_id = esc_attr ($ _ POST ["element-max-id"]); pentru ($ i = 0; $ i < $max_id; $i ++)  $field_name = "element-page-id-" . $i; if (isset($_POST[$field_name]))  $front_page_elements[] = esc_attr($_POST[$field_name]);   update_option("theme_name_front_page_elements", $front_page_elements);

    Aceasta salvează datele, însă trebuie să prezentăm valorile din pagina de setări. Deci, să facem același lucru ca și cu num_elements câmp și încărcați opțiunile implicite la începutul funcției:

     $ front_page_elements = get_option ("topic_name_front_page_elements");

    Apoi, redați elementele existente atunci când faceți formularul: