Documente Academic
Documente Profesional
Documente Cultură
Daca esti vreodata nesigur despre un asptect al functiilor WP, doar trebuie sa faci
sapaturi in cod
Ce este in nucleu
Nucleul nu include fisierele custom pentru pluginuri, teme, setari de DB, fisierul
.htaccess si asa mai departe
In WP, fisierele de nucleu sunt fisiere PHP, dar ele contin de asemenea CSS, JS,
HTML si fisiere pentru imagini.
Aceste fisiere controleaza tot despre WP, incluzand cum pagini din continut sunt
generate pentru a fi afisate, incarcarea temelor si pluginurilor, incarcarea
optiunilor si setarilor si multe altele
utilizatori si autori
Twenty Twelve
Twenty Thirteen
Twenty Fourteen
Cele mai multe fisiere nucleu contin documentatie in forma comentariilor de cod
Tipic, un comentariu de cod este afisat in headerul fisierului si ofera un sumar de ansamblu asupra
fisierului de nucleu pe care il vizionati
Pentru a vedea acestea, deschideti fisierul wp-login.php localizat in directorul root al WP. Veti observa
ca partea de sus a fisierului are un comentariu de header care descrie functia fisierului.
/**
* @package WordPress
*/
Toate fisierele de nucleu, altele decat imaginile, pot fi vazute cu un program editor de text
Fiecare functie este explicata in detaliu direct, inainte de declaratie, intr-un bloc de comentarii avand
template
/**
* Short Description
* Long Description
* @package WordPress
* @since version
*/
Gasirea functiilor
Cautarea unei functii in nucleu(eng: core) este cea mai rapida metoda de a invata cum o functie specifica
WP functioneaza
Se pot vedea exact ce parametrii sunt permisi sa se trimita catre functie, si de asemenea ce face functia
si ce valori returneaza
Se pot cauta functii cu editorul de text (de exemplu se poate cauta is_super_admin()) :
/**
* @since 3.0.0
* @param int $user_id (Optional) The ID of a user. Defaults to the current user.
*/
$user = wp_get_current_user();
else
if ( ! $user || ! $user->exists() )
return false;
if ( is_multisite() ) {
$super_admins = get_super_admins();
return true;
} else {
if ( $user->has_cap('delete_users') )
return true;
return false;
}
Explorarea nucleului
Functions.php:
Aceste functii sunt folosite pentru a interactiona usor cu Wordpress folosind o metoda standardizata
wp_nonce_field() – adauga campuri ascunse nonce formurilor. Un camp/field nonce este utilizat in
scopuri de verificare in WP
Option.php
add_option(),udate_option(),get_option()
Formatting.php
capital_P_dangit() – filtru faimos care forteaza P in WordPress sa fie cu litera mare cand este afisat in
context
Pluggable.php
The pluggable functions fi le lets you override certain core functions of WordPress. WordPress loads
these functions if they are still undefi ned after all plugins have been loaded. Some of the more
commonly used functions include:
User.php
Post.php
The post.php fi le contains the functions used in the post process of WordPress, including:
get_post_custom() —Returns a multidimensional array with all metadata (custom field) entries for a
post
Taxonomy.php
The taxonomy.php file contains the functions used by the WordPress Taxonomy API. Taxonomies are
used to manage the hierarchical relationships of metadata such as categories and tags (described in
Chapter 6 ) and can also be extended, as you’ll explore in Chapter 7 . Functions in this fi le include:
wp_insert_term()
Functii deprecate
Cand o noua versiune de WP este developata, anumite functii pot sa deviena deprecate : nu sunt scoase
din WP, dar nu ar mai trebui folosite in pluginuri si teme in viitor
In acest caz o noua functie a fost creeata pentru a inlocui functia deprecata
/**
* @since 1.5.0
* @deprecated 3.4.0
* @see wp_get_theme()
*
* @return string
*/
La modul general, functiile deprecate nu sunt de obicei scoase din WP, dar nu este nici o garantie ca o
functie deprecata nu va fi scoasa din nucleul WP
WP are diferite resurse online care sunt extrem de utile cand inveti si lucrezi cu WP
Aceste resurse ar trebui bookmarked pentru referinta rapida si sunt folosite ca referinta rapida de
incepatori si experti WP
Referinte la functii
Functiile WP sunt descrise in Codex cu o pagina de referinta la fiecare functie API in parte
Ne putem gandi la Function Reference ca o varianta online si expandata a documentatiei de functii inline
Cea mai utila sectiune din Function Reference este sectiunea Examples
Pentru exemplul get_user_data() este afisat :
$username = $user_info->user_login;
$first_name = $user_info->first_name;
$last_name = $user_info->last_name;
echo "$first_name $last_name logs into her WordPress site with the user name of $username.";
?>
Acesta este un exemplu foarte simplu, dar impreuna cu informatii aditionale de referinta te poate ajuta
sa inveti usor o functie noua si cum sa o folosesti corespunzator in cod
Majoritatea functiilor de API WP sunt bine documentate, dar nu toate functiileau o pagina de Function
Reference in Codex
Wordpress API
Cele mai multe API insereaza referinte in cod non-core care va fi adaugat in directorul wp-content prin
inregitrarea punctelor de intrare in WP
API de Plugin
http://codex.wordpress.org/Plugin_API
API de Widgets
API de Shortcode
Utilizat pentru a adauga shortcodes in plugin. Un shortcode este un cod macro adaugat unui post
Acesta permite pluginului sa preia acel shortcode si sa execute diferite comenzi specifice si sa afiseze
elemente in loc in postare
Adagarea [gallery] in postare afiseaza automat toate imaginile uploadate la acel post intr-un stil de
galerie. Cand se editeaza un post, vei vizualiza shortcode-ul [gallery], dar vizualizarea pe partea publica a
WP va afisa galeria de imagini
http://codex.wordpress.org/Shortcode_API
API de HTTP
In principiu, ia URL-ul oferit si testeaza o serie de metode PHP pentru a trimite request-ul
Metodele curente HTTP API PHP testate sunt cURL, Streams si FSockopen
Folosind HTTP API se poate interactiona usor cu Google Maps pentru a genera dinamic harti si puncte
HTTP API poate de asemenea interactiona usor cu Twitter API, permitanduti sa postezi/afisezi tweet-uri
direct din WP
Settings API
este utilizat pentru a creea si gestiona optiuni custom pentru pluginuri si teme
aceasta insemna ca nu trebuie sa ne facem griji pentru amenintari, validari de date sau atacuri de tip
cross-site-scripting XSS cand salvam date de setari
http://codex.wordpress.org/Settings_API
Options API
ofera o metoda usoara pentru a creea, updata, receptiona si sterge valori de optiuni
http://codex.wordpress.org/Options_API
Widgeturile adaugate din API automat contin toate caracteristicile jQuery pe care admin dashboard
widgest le au, incluzand drag/drop, minimize si ascundere prin optiuni de ecran
http://codex.wordpress.org/Dashboard_Widgets_API
Rewrite API
Utilizat pentru a creea reguli de rescriere custom. Acest API permite creearea regulilor de rescriere cum
sunt cele din fisierul .htaccess
se pot creea de asemenea taguri de structuri permalink (cum este %postname%) si puncte statice (cum
este /my‐page/)si chiar adauga link-uri aditionale de feed
http://codex.wordpress.org/Rewrite_API
Code Reference
este o resursa auto-generata online care permite developerilor sa gaseasca infomatii despre functii,
clase, hooks si altele
Nu hack/schimbati nucleul
wordpress trebuie updatat la zi, deoarece poate avea vulnerabilitati de securitate in caz contrar
Loop-ul se refera la modul in care wp determina continutul(postari, pagini sau continut custom) pentru a
afisa pagina pe care o vizitati
Loop-ul poate afisa o singura bucata de continut sau un grup de postari si pagini care sunt selectate sa se
itereze/loop prin ele, de aceea se cheama LOOP
Loop-ul selecteaza postari din baza de date MySql bazat pe un set de parametrii, si acei parametrii sunt
determinati tipic de URL-ul utilizat pentru a accesa site-ul web WP
De exemplu, o pagina acasa/home poate afisa toate postarile de blog care sunt datate cu o luna
particulara sau un an
Wordpress mapeaza aproape orice parametru despre postari intr-o variabila de selectie, oferind o baza
pentru un numar de diferite cai de a altera continutul algoritmului de selectie al loop-ului
Este o cale usoara de a customiza ce continut este afisat, si unde, pe website cu o intelegere a modului
in care Loop-ul translateaza un URL in ce vedeti cand accesati link-ul
acest capitol discuta cum functioneaza, unde este folosit loop-ul, si flow-ul logic al Loop-ului, precum si
cum sa customizam Loop-ul folosind mai multe functii diferite si metode de acces de date disponibile in
WP. Variabilele globale care mentin starea curenta sunt de asemenea discutate cu utilizare in afara Loop
Intelegerea Loop-ului
Prin intelegerea modului in care Loop-ul functioneaza, va vom ajuta sa intelegeti cum il puteti controla.
Controlul Loop-ului astfel incat sa obtinem exact continutul pe care il dorim este una din cele mai utile
skill-uri in developing
Deoarece Loop-ul este inima fiecarei teme WP, sa fim capabili sa customizam continutul afisat deschide
noi porti in a face WP sa arate si sa se comporte cum dorim
Pentru a intelege loop-ul, ne ajuta sa spargem in pasi modul in care WP genereaza continut de pagina:
URL-ul este potrivit cu fisierele existente si directoarele in instalarea WP. Daca fisierele sunt acolo, este
incarcat pe Web Server. WP nu este implicat in aceasta decizie; este despre serverul web si fisierul
.htaccess creeat in WP sa decida daca URL este ceea ce va fi gestionat de serverul web sau transformat
in query de continut WP. Aceasta a fost discutata in permalinks, Capitolul 2
Daca URL-ul nu incarca un fisier de nucleu WP, va fi parsat pentru a determina ce continut sa incarce.
Serverul Web incepe sa incarce nucleul prin fisierul index.php pentru a incepe setup-ul pentru Loop. De
exemplu, cand vizitam un tag specific precum : http://example.com/tag/bacon, WP va determina ca
vizualizam un tag si incarca template-ul apropiat, selecta postarile salvate cu acel tag, si genera output
pentru pagina de tag
Wordpress apoi converteste parametrii de specificatie query intr-o baza de date MySQL pentru a regasi
continutul. Workhorse aici este metoda get_posts() din obiectul WP_Query care este descris mai tarziu
in acest capitol. Metoda get_posts() ia toti acesti parametrii de interogare si ii transforma in instructiuni
SQL, eventual invocand stringul SQL pe serverul bazei de date MySQL si exrage continutul dorit.
Continutul returnat de baza de date este apoi salvat de obiectul WP_Query pentru a fi utilizat in Loop-ul
Wordpress si stocat in memoria cache pentru a accelera alte referinte facute la acelasi post facute
inainte ca o alta interogare de baze de date sa fie executata.
Odata ce continutul este primit, WP seteaza toate tagurile conditionale is_, precum is_home() sau
is_page(). Acestea sunt setate ca parte a executiei default query bazata pe parsarea URL, si s-ar putea sa
fie cazuri cand este necesar sa resetati aceste taguri.
Wordpress alege un template din dashboard-ul temei bazat pe un tip de query si pe un numar de postari
returnate – de exemplu, un singur post sau un query doar pentru categorie – si output-ul query-ului este
pasat catre invocatia default a Loop-ului
Loop-ul poate fi customizat pentru diferite propuneri de site-uri. De exemplu, un site de stiri ar putea
folosi Loop-ul pentru a afisa ultimele stiri. Un director de afaceri ar putea folosi Loop-ul pentru a afisa
afaceri locale alfabetic dupa nume, sau intotdeauna sa puna postari despre afacerile sponsorizate in
partea de sus a paginii afisate
Un site e-commerce poate utiliza Loop-ul pentru a afisa produse incarcate in website
Posibilitatile Loop-ului sunt nenumarate cand customizam Loop-ul in WP deoarece ne ofera control
complet asupra continutului care este selectat si a ordinii in care este randat pentru afisare
Odata ce parametrii de query au fost stabiliti, fie prin dezasamblarea URL-ului oferit de reader sau
avandu-i setati explicit printr-un loop customizat, metoda get_posts() a obiectului WP_Query
tranlateaza acesti parametrii in SQL pentru o interogare in baza de date. In timp ce puteti exercita
control asupra unui tip, selectie sau ordonare prin parametrii de query, nucleul/core WP de asemenea
expune filtre pentru a ne permite sa schimbam SQL generat pentru un control si mai fin asupra selectarii
continutului si filtrarii
formatul de baza al query SELECT este : SELECT fields FROM table WHERE conditions
Wordpress simplifica punerea de taguri multiple la un post, sau punerea unui post in mai mult de o
categorie, dar bazele de date relationale nu sunt adepte in gestionarea acestor relatii ierarhice si de
retea
Asa cum vom vedea in capitolul 6, WP data model foloseste tabele multiple pentru a gestiona aceste
relatii complexe, dar aceasta face ca interogari precum : “gaseste toate postarile cu tag-ul bacon” mai
dificil de executat
de exemplu, pentru a selecta postarile cu tagul bacon, un SQL JOIN este necesar mai intai pentru a gasi
bacon in metadata taxonomy, constuirea intermediara, punerea in memorie a tabelelor de postari care
au tag-ul bacon, si apoi selectarea postarilor al caror ID apare atat in tabelul intermediar cat si in tabelul
cu continut principal WordPress. (se numeste produs cartezian sau inner join a 2 sau mai multe tablele)
In capitolul 8 se va sapa mai mult in pluginuri si modul in care aceste a se ataseaza pentru a filtra si a
actiona insertia de puncte hook in nucleul/core WP.
In generarea de request-uri SQL, exista un numar de filtre care sunt invocate pentru a oferi autorilor
plugin-ului legare-tarzie si control explicit asupra SQL care va fi executat
De exemplu, considerati un plugin care schimba selectia postarilor in functie de custom post metadata
si context pe care pluginul le mentine intr-un fisier de baza de date separat
Pluginul tau va folosi filtrul posts_join pentru a rescrie clauza JOIN, adaugarea unui alt tabel si camp care
se potriveste cu clauza pentru a expanda in viitor multimea de selectie
Daca doriti sa explorati core pentru detalii privind generarea SQL, cele mai multe parsari query-to-
request sunt facute in wp-includes/query.php si munca de JOIN este setata in wp-includes/taxonomy
O nota finala asupra generarii de SQL: WP face o foarte buna treaba in construirea de URL-uri canonice,
adica una si doar o referinta pentru un post particular
O parte a functiei de parsare URL in nucleul WP incearca sa curete si sa redicteze URL-urile catre forma
canonica; aceeasi functie face de asemenea efort pentru a returna continut relevand mai degraba decat
pagina 404. Ca rezultat, daca o incercare de a incarca o pagina al carui nume esueaza, WP va insera un
modificator LIKE in clauza WHERE care contine numele postarii
De exemplu, daca un utilizator ofera URL: http://example.com/2015/lecter dar nu exista nici o postare
cu titlul ‘Lecter’, clauza LIKE va portrivi orice postare care iincepe cu Lecter, precum “Lecter Fish IPA
Review”. URL-uri canonice si potrivirea/matching “like name” sunt parte dintr-un mare labirint complex
de URL rewriting si UX placut care incearca sa genereze o pagina mai degraba decat o eroare 404.
Intelegerea continutului in WP
Inainte de a descrie Loop-ul in detaliu, sunt importante de inteles principalele tipuri de continut in WP
De la inceput, WP are setate 2 tipuri de continut: postari si pagini. Ce veti vedea in capitolul 6 este ca
toate tipurile de continut sunt inmagazinate in aceeasi baza de date MySql, fiind diferentiate de “post
type”. De la versiunea WP 2.9. este posibil sa avem propriile custom types, care este continut custom in
WP. De exemplu, putem avea un custom post Eveniment pentru a inregistra evenimente in WP
In acest capitol, continutul este referit ca “postari”, dar este important sa tinem minte ca postarile pot fi
de orice tip
The Loop este inima unei teme, ceea ce controleaza cum continutul este afisat. Este o conexiune
functionala intre baza de date MySQL si HTML care este afisat in browserul vizitatorului
Acesta poate fi un singur post sau pagina, un loop de postari, sau o secventa de loop-uri cu diferite
optiuni de afisare
Figura 5-1 arata cum loop-ul este plasat direct in mijlocul acestor evenimente, creeand aria de continut a
web-site-ului. Aceasta sectiune a web-site-ului este de obicei dinamica si se va schimba cand navigam
prin ea
Loop-ul este utilizat, implicit, in fisierele de template. Loop-uri custom pot fi creeate oriunde in fisierele
de tema template, asa cum figura 5-2 afiseaza. Loop-uri custom sunt de asemenea utilizate in pluginuri
si widget-uri. Loop-urile pot fi folosite oriunde in WP, dar exista diferite metode pentru a creea loops
custom depinzand unde vor fi utilizate, si potentialul efect lateral pentru fiecare constructie difera
Pot fi utilizate Loop-uri multiple in fisierle de teme. Loop-urile custom pot fi creeate in header, in
sidebars, in footer si in ariile de continut principal ale site-ului
Aveti in minte ca loop-ul este efectiv un query in baza de date pentru a selecta continut si apoi o iterare
peste selectie pentru a o afisa
Loop-ul default foloseste context din URL-ul vizitat pentru a face selectia, dar putem sa il ajustam si sa
efectuam o intergorare in baza de date cu continut WP pentru a implementa orice numar de procese de
management al continutului
Fluxul loop-ului
Loop-ul foloseste unele conditii standard de programare pentru a determina ce si cum sa afiseze. Prima
instructiune in loop este instructiune if care verifica daca exista postari, deoarece s-ar putea sa nu avem
postari in categoria sau tagul specificat.
Daca exista un context, instructiunea while este utilizata pentru a initia Loop-ul si cicla prin toate
postarile sau paginile care trebuie afisate.
In final, functia the_post() este apelata pentru a construi date de post si sa il faca accesibil altor functii
WP.
Odata ce datele de post au fost construite, continutul Loop-ului poate fi afisat in orice format dorim
daca va intrebati cum output-ul din acest query de baze de date este gestionat cand nu exista variabile
trimise ca parametrii,raspunsul sta in variabila globala $wp_query, care este instanta a clasei WP_Query
care este referentiata de functii in loop-ul simplu. Este, in efect, query default pentru loop
de notat ca inainte ca loop-ul default sa fie apelat,WP deja a apelat metoda get_posts() din default
query object pentru a construi o lista de continut apropiat pentru URL-ul vizualizat. Loop-ul in acest caz
a fost incarcat cu afisarea unei liste de postari. Mai tarziu, ne vom uita cum putem sa avem control
asupra selectiei posturilor, dar pentru moment este safe sa presupunem ca baza de date a fost
interogata, si ca rezultatele sunt stocate in $wp_query cand Loop-ul este invocat