Teme pentru copii în wordpress

Acasă → Subiecte → Subiecte afiliate în WordPress

Temele copilului în WordPress vă permit să modificați subiectele existente și astfel încât astfel de modificări să nu se piardă la actualizarea temei originale (sau părinte). În plus față de aspect, temele copilului vă permit să modificați marcajul și chiar funcționalitatea temei părinte, extinzându-l la nevoile dvs.







Sprijinul pentru temele copilului în WordPress a apărut cu mult timp în urmă, însă majoritatea utilizatorilor de astăzi preferă să facă schimbări direct în codul sursă. În acest articol, vom vorbi despre modul în care temele copilului lucrează în WordPress și de ce folosirea oricăror teme pentru copii ar trebui să facă modificări subiectelor existente.

Ce este tema copilului

O temă a copilului în WordPress este o temă care moștenește aspectul și funcționalitatea temei părinte (originală). Această moștenire facilitează modificarea și completarea părților individuale ale temei părinte fără a schimba tema originală. Datorită acestei abordări, actualizarea temei părinte nu va afecta astfel de modificări.

Tema părinte poate fi orice altă temă pentru WordPress (cu excepția temelor copilului), iar pentru lucrarea temei copilului trebuie să fie setate ambele teme, dar este necesar să activați copilul.

Cum se creează o temă pentru copii

De exemplu, vom crea o temă pentru tema "Copilul meu" și vom folosi tema standard Twenty Twelve ca temă părinte.

Mai întâi, asigurați-vă că există tema părinte - găsiți directorul twentytwelve în wp-content / themes. Apoi, creați un nou director în wp-content / themes și denumiți tema my-child. În acest nou director, creați un fișier stil.css și inserați în el următorul antet:

Cu ajutorul acestui antet, am definit numele noului nostru subiect și am indicat și părintele. Directiva @import în acest caz încarcă toate stilurile din tema Douăzeci doisprezece, în plus, vom face modificările. Fără această directivă, tema copilului nostru va moșteni numai șabloanele (marcajul) temei părinte, nu stilul.

După aceea, directorul dvs. cu teme ar trebui să arate cam așa:

Teme pentru copii în wordpress

Structura temei subsidiare

Accesând secțiunea Aspect → Teme, veți vedea că noua dvs. temă este deja disponibilă pentru activare.

Teme pentru copii în wordpress

Activarea unei teme pentru copii

Dacă îl activați și mergi la pagina principală a site-ului dvs., veți vedea că tema copilului dvs. arată exact ca tema standard Twenty Twelve.

Lucrul cu stilurile

Stilurile CSS ale temei copil pot fi specificate direct în fișierul style.css imediat după directiva @import. De exemplu, pentru a seta culoarea și culoarea de fundal a link-urilor în tema dvs., adăugați următorul cod la sfârșitul foii de stil:

În acest fel, puteți modifica stilurile oricăror elemente ale temei părinte și puteți găsi cu ușurință elementul necesar utilizând instrumentele de dezvoltator din browserul Google Chrome sau cu extensia Firebug pentru browserul Firefox.

Lucrul cu șabloanele

Cu ajutorul unei teme de tip copil, puteți modifica cu ușurință șabloanele temelor părinților. Pentru a face acest lucru, este suficient să creați un fișier într-o temă copil cu același nume ca șablonul din tema părinte. De exemplu, pentru a înlocui șablonul footer.php cu propriul dvs., creați un fișier footer.php în directorul cu tema copilului dvs.:

Așa că am înlocuit textul în pivnița Twenty Twelve cu propriile noastre.

Adesea, atunci când lucrați cu șabloane în temele copilului, este mai ușor să copiați un șablon existent din tema părinte și să îl modificați deja în tema copilului, păstrând astfel structura întregului document HTML. Dacă faceți o greșeală, puteți șterge oricând șablonul și puteți începe din nou.

Puteți crea, de asemenea, noi fișiere șablon care nu se află în tema părinte și WordPress le va conecta în funcție de ierarhia șablonului. De exemplu, dacă nu există nici un fișier page.php în tema părinte, puteți crea un fișier cu acest nume în tema copilului dvs. și WordPress îl va conecta la afișarea unei pagini.

De asemenea, este de remarcat faptul că în acest fel nu puteți schimba toate fișierele temei părinte. De exemplu, nu puteți modifica fișierul care a fost apelat de funcția PHP include sau necesită.

Lucrul cu funcțiile.php

Un fișier cu funcții de temă functions.php este de o importanță deosebită pentru temele WordPress. Nu puteți să o înlocuiți complet în tema copilului dvs., dar puteți crea propriul fișier funcțional.php. pe care WordPress o va executa înainte de a încărca funcțiile funny.php sau orice alt șablon al temei părinte.

Acest lucru înseamnă că în funcțiile dvs. funcții.php puteți utiliza evenimente, filtre și așa-numitele funcții "suprascrie" pentru a manipula comportamentul temei părinte. De exemplu, în fișierul footer.php din tema Twenty Twelve, se cheamă evenimentul twentytwelve_credits. Pentru a adăuga propriul text în timpul acestui eveniment, putem folosi următorul cod în funcțiile.php ale temei copilului nostru:

De asemenea, puteți să înlocuiți unele dintre funcțiile temei părinte. De exemplu, Twenty Twelve utilizează funcția twentytwelve_content_nav pentru a afișa navigarea înregistrărilor. Dacă trebuie să modificați comportamentul acestei funcții, de exemplu, utilizați navigarea WP-PageNavi. îl puteți ignora în fișierul functions.php din tema copil:







Rețineți că nu puteți suprascrie toate funcțiile temei părinte, ci numai cele care sunt înfășurate într-o condiție cu funcția function_exists. de exemplu:

Localizarea temelor copilului

După aceasta puteți utiliza funcțiile de localizare WordPress în liniile dvs.:

Fiți atenți la al doilea parametru (domeniul de text), trebuie să se potrivească cu ceea ce ați specificat în apelul la funcția load_child_theme_textdomain. În acest mod, WordPress va folosi directorul de limbi în subiectul copil pentru toate rândurile cu domeniul temei my-child. în timp ce liniile din subiectul inițial vor fi în continuare traduse utilizând pachetele de limbă originale.

concluzie

În concluzie, aș dori să rețin încă o dată - nu modificați niciodată fișierele sursă ale unei teme WordPress existente, toate modificările dvs. vor fi pierdute atunci când tema este actualizată. Este temele copiilor care sunt cele mai fiabile și corecte moduri de a face schimbări la temele WordPress existente.

Dacă doriți să efectuați modificări numai la nivelul CSS (fără a schimba șabloanele), puteți utiliza și orice plugin de editare CSS.

Kostya, mulțumesc!

Bună Constantin. Mi-am scos tot parul cu problema localizării temei copilului. Am făcut totul conform instrucțiunilor. Introduceți codul necesar în funcție. Crearea fișierelor po și mo (utilizând pluginul de localizare CodeStyling) în tema copil și părinte. Cu toate acestea, după actualizarea subiectului, după cum era de așteptat, fișierele de localizare din tema părinte și toate traducerile dispar. Am verificat totul. Înțeleg că Wordpress ia fișierele de localizare numai din tema părinte și nu le vede în folderul de limbi al temei copil. Trebuie să copiem în mod constant fișierele po și mo de la copil la părinte și numai atunci funcționează. Deși, după cum am înțeles, fișierele de localizare ar trebui să funcționeze din tema copilului și să nu se supună modificărilor temei părinte. Nu-mi spuneți ce ar putea fi problema? Mulțumesc.

Dmitry, dacă nu mă înșel, atunci fișierele de localizare ale temei copilului pot fi traduse numai cu linii noi pe care le folosești în subiectul copilului, de fapt, și "domeniul de text" ar trebui să fie diferit.

Dacă doriți să modificați fișierul de localizare tema părinte, cel mai bine este de a utiliza directorul wp-content / limbi / teme / THEMENAME și locul în care fișierele de traducere, deși 4.0 modificările sunt planificate în acest domeniu, și nu este foarte clar modul în care acest lucru va afecta actualizarea.

Am făcut tot ce ați spus, dar, din anumite motive, stilurile nu au fost trase.
/ *
Tema Nume: Sueva-copil
Descriere: Tema copilului meu
Format: suevafree
* /

ce ar putea fi problema?

și o mulțumire specială pentru site-ul dvs., totul este foarte inteligibil, este scris în mod clar și, cel mai important, este frumos pentru ochi și frumos structurat!

Ar fi mai ușor să trimiteți un link către site-ul dvs., unde este instalată această temă pentru copii.

Am făcut același lucru cu o altă temă (douăzeci și douăsprezece, totul sa dovedit perfect.) Care este motivul? Subiectul în sine este așa? Ce altceva poate influența aspectul paginii, în plus față de fișierul style.css?

Bună Constantin. Și cum să folosiți tema copilului pentru a șterge o parte din codul din funcția function.php. De exemplu, în tema părinte din fișierul function.php, creez o fotografie cu dimensiunile specificate folosind codul "add_image_size ('thumb-small', 160, 160, true); Vreau să mă asigur că această bucată de cod nu este executată, cum se face?

Bună ziua, Konstantin. Am aceeași problemă cu Galina. Am vrut să pun centrul celor douăzeci și paisprezece. Dar stilurile nu sunt încărcate din tema părinte. Spune-mi, te rog, ce sa întâmplat?
/ *
Numele temei: twentyfourteen
copil
Format: douăzeci și unu

Promiți cum să fii cu plug-in-uri? Există două exemple specifice. Am schimbat pluginul woocommerce - adăugând cârligul meu și schimbând ordinea ieșirii elementelor în plugin. A făcut modificări în plugin-ul însuși, nu în fișierele de șabloane. Cum să modificați corect pluginurile - astfel încât, atunci când sunt actualizate, acestea să fie salvate? Creați noul plug-in sau ce? Prompt, vă rog.

Yuri, cu pluginurile, din păcate, nu va funcționa ca și în cazul temelor. Dacă trebuie să adăugați filtrul sau evenimentul dvs. în pluginul altcuiva, este recomandat să contactați dezvoltatorul și să îi cereți acestuia să adauge acest cârlig, deoarece poate fi utilă nu numai pentru dvs.

Dacă dezvoltatorul refuză, atunci puteți să vă păstrați propria "ramură" a plug-in-ului, să păstrați o listă a modificărilor, de exemplu, ca fișier .diff și să aplicați acest fișier de fiecare dată când actualizarea plug-in-ului este actualizată.

Vă mulțumim pentru răspunsul prompt. Opțiunea cu fișierul .diff este un proces automatizat sau toate modificările trebuie efectuate de fiecare dată manual?

Dacă îl automatizați, acesta va fi automatizat :) Există utilitare pentru diff și patch-uri în fiecare sistem similar cu Unix. În cazul în care plug-in-ul este pe GitHub, puteți încerca să-l rulați acolo și, din când în când, actualizați-l din original.

Bună ziua. Sunt lucruri ciudate.)) În fișierul css (fiice) schimb stilurile bine, dar uneori de ce unii nu doresc să lucreze. Nu-mi spuneți ce ar putea fi problema?

Am instalat o temă care conține deja atât părintele, cât și copilul. De la început, am început și am lucrat în părinte. Este timpul să instalați actualizarea. Trebuie să activați copilul înainte de acest eveniment, dar nu copiază complet părintele (pierde meniul nu pe paginile neonocoriale etc.). Ce este necesar pentru a face acest lucru identic. Mulțumesc.

Și cum să înlocuiți funcția fișierului în funcția function.php a temei părinte? Mai exact, aveți nevoie de următoarele: în fișierul funcțional.php al temei părinte există un șir care necesită get_template_directory (). '/inc/custom-header.php'; În același timp, atunci când tema copilului este activată, custom-header.php se extinde din tema părinte. Am înțeles că, pentru ca custom-header.php să fi fost preluat din tema copilului, trebuie să redefiniți șirul de conexiuni al acestui fișier în funcția function.php a temei copil. Cum se face acest lucru? O simplă indicație a stringului necesită get_template_directory (). '/inc/custom-header.php'; în task.php subiectului copil provoacă o eroare.

Nu, dacă tema utilizează direct solicită. atunci nu puteți schimba acest comportament de la copil. În cazul dvs., este mai bine să găsiți filtre și evenimente care sunt executate în custom-header.php și să încercați să le dezactivați cu remove_action sau remove_filter.

Poate că a fost prost, dar nu a înțeles: "_e (" Textul meu translatabil merge aici "," Tema mea-copil ");
În general, sa dovedit a fi de succes pentru a crea o temă copil, a lansat dosarul "limbi" cu fișierele de traducere modificate. Am scris totul în funcțiile funcționale.php așa cum este specificat în articol, dar traducerea nu este afișată. A încercat să reinstaleze tema cu activarea ulterioară, dar nu sa întâmplat nimic.

Dacă sarcina este de a face propria traducere deja existentă a subiectului, atunci cel mai probabil trebuie să utilizați un alt filtru, și anume:

$ mofile = apply_filters ('load_textdomain_mofile', $ mofile, $ domain);

Asta este, trebuie să "luați" load_textdomain_mofile cu funcția dvs. și să comparați domeniul pentru a aluneca calea către fișierele din subiectul copilului. În acest fel, puteți stoca traducerile temei părinte în copil fără a fi nevoie să schimbați șabloanele.

Probabil, aceasta nu este cea mai tare cale, pentru că calea este deja plină și nu va fi foarte convenabil să o comparați.

Poate că a fost prost, dar nu a înțeles: "_e (" Textul meu translatabil merge aici "," Tema mea-copil ");

Textul meu translatabil merge aici - textul care trebuie tradus.

my-child-theme - domeniul de text al temei copil (ar trebui să fie diferit de părinte).

Traducerea nu a fost disponibilă pe pagina contact.php a creat o copie a acesteia în fiică. Editat domeniile din acest fișier către domeniul copil. De fapt, de fapt, traducerea a apărut. Dar se pare că acum dacă contact.php este actualizat, nu mă va afecta. Am tendința de a fi nevoit să înlocuiesc funcția părinte "load_theme_textdomain"

Deși în acest caz, traducerea nu va fi actualizată. Trebuie să plecați ca atare.

Ah, deși opresc. Puteți compara domeniul - este frumos, adică printr-un obișnuit dacă ($ domain === 'parent-theme-name'). Și faceți ceva cu $ mofile - trebuie doar să scrieți o nouă cale spre fișier din tema copilului și toate :)

În general, tema nu ar trebui să încarce nimic în directoarele sale, ar trebui să încarce tot conținutul utilizatorilor numai în wp-content / uploads, bine, depinde în general de cod, poate fi încărcat în părinte sau poate în copil.

În Includea, nu puteți efectua modificări cu ajutorul temelor copilului. acestea sunt încărcate direct prin include () sau necesită (). și nu prin locate_template ().

Cu important! În general, este dificil să lucrezi, să suprascrieți acest stil, de asemenea trebuie să îl folosiți! Important și încă alegeți un selector CSS mai specific.







Trimiteți-le prietenilor: