Korisni umetci koda (isječci) za WordPress. PHP kod u WordPress-u - najbolje prakse Povezivanje skripti i stilova u WordPress-u bez sukoba

Kako bi se osiguralo da je WordPress kod svugdje dizajniran u istom stilu i da se lako čita u jezgri, dodacima i temama, preporučuje se da slijedite standarde kodiranja koje su usvojili WordPress programeri. Ovi standardi su vrlo slični standardu PEAR, ali postoje značajne razlike. Preporučujem da se upoznate s njima i, ako je moguće, slijedite ih prilikom kreiranja dodataka ili tema.

Pored standarda za pisanje samog PHP koda, postoje i standardi za dokumentovanje koda - ovo su komentari na funkcije i kuke: PHP Documentation Standards (engleski)

Jednostruki i dvostruki navodnici

Ako u nizu nema varijabli, koristite jednostruke navodnike, inače dvostruke navodnike. Nema potrebe za izbjegavanjem navodnika u nizu, a ako su prisutni, preporučuje se da ih izmjenjujete:

Echo "Naziv veze"; echo "$linkname";

Drugi red u ovom primjeru ne briše izlazne varijable, što se mora učiniti iz sigurnosnih razloga. Stoga, za takvo upisivanje, varijable moraju biti očišćene unaprijed. Općenito, takav snimak se može smatrati neprihvatljivim! Pogledajte odjeljak tutoriala o sigurnom izlazu.

Udubljenja

Uvlačenje uvijek treba pokazati logičku strukturu koda. Koristite tabove (taster Tab) umjesto razmaka - ovo daje veću fleksibilnost. Razmake treba koristiti kada trebate nešto poravnati unutar linije.

pravilo: tabove treba koristiti na početku reda za uvlačenje, dok se razmaci mogu koristiti u sredini reda za poravnanje.

Ako (uvjet) ( $foo = "neka vrijednost"; $foo2 = "neka vrijednost2"; $foo_bar = "neka vrijednost3"; $foo5 = "neka vrijednost4"; )

A ovako izgleda kod ako pokažete nevidljive tabulator i razmak:

If (uslov) ( ---$foo.....= "somevalue"; ---$foo2....= "somevalue2"; ---$foo_bar.= "somevalue3"; ---$foo5 ....= "somevalue4"; )

Za asocijativne nizove, vrijednosti moraju početi u novom redu. Preporučljivo je staviti "zadnji" zarez kada se nabrajaju elementi niza - to olakšava dodavanje novih elemenata...

$my_array = array(---"foo"..=> "somevalue", ---"foo2"..=> "somevalue2", ---"foo3"..=> "somevalue3", -- - "foo34".=> "somevalue3",);

Stil kovrčave zagrade

Kovrčave zagrade se moraju koristiti za sve blokove u stilu, kao što je prikazano u nastavku:

If (uvjet) ( akcija1(); akcija2(); ) elseif (uvjet2 && uvjet3) (akcija3(); akcija4(); ) else ( defaultaction(); )

Ako postoji dugačak blok, treba ga razbiti na dva ili više kratkih blokova ili funkcija ako je moguće. Ako je tako dugačak blok neophodan, dodajte kratak komentar na kraju da bi bilo jasno šta tačno zatvara vitičasta zagrada. Ovaj pristup je logično koristiti za blok sa 35 ili više linija.

Svaki kod koji nije intuitivan treba prokomentirati.

Uvijek koristite vitičaste zagrade, čak i ako nisu potrebne.

If (uvjet) ( action0(); ) if (uvjet) ( action1(); ) elseif (uvjet2) ( action2a(); action2b(); ) foreach ($items kao $item) (process_item($item); )

Imajte na umu da zahtjev za korištenjem vitičastih zagrada uvijek znači da su konstrukcije u stilu jedne linije zabranjene.

$var = "opasno""; // sirovi podaci koji mogu, ali ne moraju biti izbjegnuti $id = some_foo_number(); // podaci se očekuju kao broj, ali nismo sigurni $wpdb->query($wpdb-> ready( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id));

%s se koristi za nizove, a %d za cijele brojeve. Imajte na umu da nisu "pod navodnicima"! $wpdb->prepare() sama izbjegava nizove i dodaje navodnike ako je potrebno. Prednost pripreme() je u tome što ne morate da se setite da ručno koristite esc_sql() , kao i da je string upita sa čuvarima mesta vizuelniji nego da koristi varijable umotane u esc_sql() .

Upiti baze podataka

Pokušajte da ne pišete direktne upite bazi podataka. Ako postoji odgovarajuća funkcija, a ima ih mnogo u WP-u, koja može dobiti potrebne podatke, koristite je.

Korištenje funkcija umjesto upita pomaže u održavanju buduće kompatibilnosti koda. Osim toga, mnoge funkcije rade s kešom, a to može značajno ubrzati kod.

Imena klasa, funkcija, datoteka, konstanti, varijabli

Imena funkcija, varijabli, kukica

Koristite mala slova a-z u varijablama, kukicama i nazivima funkcija, a nikada CamelCase. Odvojite pojedinačne riječi podvlakama _. Nemojte skraćivati ​​imena varijabli osim ako je potrebno; neka kod bude nedvosmislen i samodokumentovan.

Funkcija some_name($some_variable) ( [...] )

Imena klasa

Morate koristiti riječi sa velikim slovima odvojenim donjim crtama. Sve skraćenice (akronimi, skraćenice) moraju biti VELIKO.

Class Walker_Category proširuje Walker ( [...] ) klasu WP_HTTP ( [...] )

Konstante moraju biti riječi VELIKIM SLOVIMA odvojene podvlakama:

Define("DOING_AJAX", istina);

Imena datoteka

Mora biti jasan i mora sadržavati samo mala slova, a riječi moraju biti odvojene crticom - .

My-plugin-name.php

Nazivi datoteka klasa

Trebalo bi da se zasniva na imenu klase sa prefiksom class-, donje crte u nazivu klase se zamenjuju crticom, na primer WP_Error postaje:

Class-wp-error.php

Ovaj standard za imenovanje datoteka vrijedi za sve postojeće i nove datoteke klasa. Međutim, postoje datoteke izuzetaka: class.wp-dependencies.php, class.wp-scripts.php, class.wp-styles.php. Ove datoteke imaju prefiks klase. , tačka iza riječi klasa umjesto crtice.

Obrišite vrijednosti varijabli u parametrima funkcije

Booleove vrijednosti su preferirane nad vrijednostima nizova. One. Umjesto true/false prilikom pozivanja funkcija, bolje je koristiti neku vrstu stringa koji objašnjava vrijednost parametra.

Loš kod:

Funkcija eat($what, $slowly = true) ( ​​... ) eat("gljive"); eat("pečurke", istina); // šta znači istina? eat("dogfood", false); // šta znači laž, suprotno od istinitog?

Budući da PHP ne podržava imenovane argumente, vrijednosti zastavice su besmislene i svaki put kada naiđemo na poziv funkcije, kao u gornjim primjerima, moramo pogledati dokumentaciju za funkciju. Kôd može biti čitljiviji korištenjem deskriptivnih string vrijednosti umjesto logičkih vrijednosti.

Dobar kod:

Funkcija eat($what, $speed = "polako") ( ... ) eat("gljive"); eat("pečurke", "polako"); eat("dogfood", "brzo");

Kada vam treba više parametara funkcije, koristite niz $args. Čak je i bolji!

Vrlo dobar kod:

Funkcija eat($what, $args) ( ... ) eat("noodles", array("speed" => "moderate"));

Interpolacija za dinamičke nazive kukica

Radi lakše čitljivosti i detekcije, zakačice sa varijablama u njihovim imenima treba da budu interpolirane (zatvorene u vitičaste zagrade ( i )) i ne bi trebale biti povezane:

Zagrade su potrebne kako bi PHP mogao ispravno analizirati tipove podataka varijabli u interpoliranom nizu.

// ispravan do_action("($new_status)_($post->post_type)", $post->ID, $post); // neispravan do_action($new_status "_". $post->post_type, $post->ID, $post);

Gdje je moguće, dinamičke vrijednosti u nazivima oznaka također trebaju biti što kraće i preciznije. $user_id je mnogo jasniji od, recimo, $this->id .

Ternarni operater

Ternarni operatori su dobri, ali preporučuju da uvijek testirate istinitu izjavu, a ne lažnu izjavu. U suprotnom je jednostavno obmanjujuće zbog dvostrukog negativnog. Izuzetak je upotreba! empty() jer je ponekad jednostavno teško napisati to na bilo koji drugi način.

Kako provjeriti:

// (ako je uslov tačan = istina) ? (onda radimo ovo) : (inače ovo); $music_type = ("jazz" == $music) ? "kul" : "bla"; // (ako vrijednost nije prazna - ! prazno) ? (onda radimo ovo) : (inače ovo);

Kako ne napisati:

// (ako uslov nije ispunjen!= istina) ? (onda radimo ovo) : (inače ovo); $music_type = ("džez" != $music) ? "bla" : "kul";

Uslovi majstora Yode

Kada izvodite logička poređenja, uvijek stavite konstante ili literale na lijevo, a varijablu na desno.

If (true == $the_force) ( $pobjedonosni = you_will($be); )

Ako izostavimo drugi znak = u gornjem primjeru (doduše, ovo se događa čak i najiskusnijima od nas), dobićemo PHP grešku i odmah ćemo je vidjeti jer kod neće raditi. Ali da je konstrukcija suprotna - $the_force = true , tada bi uslov uvijek bio ispunjen i ne bismo vidjeli nikakvu grešku, a mogli bismo propustiti tako ozbiljnu grešku, koju je također ponekad teško uhvatiti!

Samo se trebate naviknuti na ovo "naopako" pravopis.

Ovo se također odnosi na == , != , === i !== . "Yoda's Conditions" za< , > , <= или >= mnogo teže za čitanje i bolje je ne koristiti ih ovdje.

Pametan kod

Ukratko, čitljivost koda bi trebala biti u prvom planu, bitnija je od sažetosti ili nekih ne očiglednih, ali zgodnih skraćenica.

Isset($var) || $var = some_function(); // ili! isset($var) && $var = some_function();

Da - ovo je kul snimak, jasno je da ga je napravio iskusni programer. Ali bilo koji drugi programer, a često čak i autor, da bi razumio takav zapis treba malo proći i potrošiti dodatne sekunde ili minute. Ovo nije očigledan ili jasan unos i treba ga izbjegavati, a bolje je napisati duže, ali jasnije:

Ako (! isset($var)) ( $var = some_function(); )

Operator za suzbijanje grešaka @

PHP podržava jedan operator kontrole grešaka: znak @. U slučaju da prethodi bilo kom izrazu u PHP kodu, sve poruke o grešci generisane tim izrazom biće zanemarene.

Iako ovaj operator postoji u kernelu, često se koristi jer je neko previše lijen da bi pravilno obradio varijablu. Njegova upotreba je snažna Nije preporuceno pošto čak i PHP dokumentacija kaže:

Pažnja: Danas operator "@" potiskuje izlaz poruka čak i o kritičnim greškama koje prekidaju skriptu. Između ostalog, to znači da ako ste koristili "@" za suzbijanje grešaka koje se javljaju prilikom pokretanja funkcije, ako nije dostupna ili je pogrešno napisana, dalje izvršavanje skripte će biti zaustavljeno bez ikakvog obavještenja.

Jednog dana ste odlučili da napravite svoju web stranicu ili blog, a za sistem upravljanja odabrali ste WordPress... Kako je vrijeme prolazilo, vaša stranica je postajala sve čitljivija i tada ste shvatili da za još veću popularnost morate dodati malo funkcionalnosti na stranicu ili jednostavno automatizirati neke te radnje.

Odete u “skladište” wordpress dodataka i otkrijete da dodatak koji vam je potreban nije tamo. sta da radim? Sta da radim? Ako ste barem malo upoznati sa osnovama programiranja u PHP-u, rasporedom, onda vam neće biti teško Napišite sami dodatak za WordPress.

Sada idemo u "kuhinju" da pripremimo naš dodatak.

P.s. Ako nemate znanja u php-u i layoutu... ne brinite, zamolite nekoga da vam napiše potrebnu funkcionalnost :)

Pre nego što počnete da pišete dodatak, potrebno je da pogledate WordPress dokumentaciju, koja opisuje osnovne principe pisanja dodataka i neke primere koda.

Neću duplirati ovu informaciju, ali ću odmah preći na pisanje koda.

Hajde da napišemo jednostavan dodatak koji će vam omogućiti da sačuvate i prikažete recenzije o vašoj web lokaciji. Naravno, takvi dodaci već postoje, ali ovo će poslužiti kao primjer.

Prvo što ćemo učiniti je smisliti jedinstveno ime za naš dodatak - “ AdvUserReviews«.

Zatim ćemo kreirati novi direktorij “advuserreviews” u direktoriju vaše stranice “/wp-content/plugins/”. I u njemu ćemo kreirati datoteku “advuserreviews.php”. Ovo će biti glavni fajl koji će biti odgovoran za opštu inicijalizaciju. (Preporučljivo je koristiti UTF-8 kodiranje za datoteke).

Na samom početku datoteke morate navesti osnovne informacije o dodatku

Sada, ako odete na kontrolnu tablu, možete vidjeti da je sistem pronašao novi dodatak i nudi da ga aktivira. Ali još je rano za ovo.

Napisaćemo naš novi dodatak u OOP stilu i sva obrada podataka će se nalaziti u jednom fajlu. Kreirajmo glavni kostur datoteke.

// Zaustavi direktni poziv if(preg_match("#" . basename(__FILE__) . "#", $_SERVER["PHP_SELF"])) ( die("Nije vam dozvoljeno direktno pozvati ovu stranicu."); ) if (!class_exists("AdvUserReviews")) ( class AdvUserReviews ( // Pohranjivanje internih podataka public $data = array(); // Konstruktor objekta // Inicijalizacija funkcije glavnih varijabli AdvUserReviews() ( ) ) ) global $rprice; $rprice = novi AdvUserReviews();

Sada dodajmo sljedeći kod u konstruktor objekta:

Funkcija AdvUserReviews() ( globalni $wpdb; // Deklarirajte konstantu inicijalizacije našeg dodatka DEFINE("AdvUserReviews", true); // Naziv datoteke našeg dodatka $this->plugin_name = plugin_basename(__FILE__); // URL adresa za naš dodatak $ this->plugin_url = trailingslashit(WP_PLUGIN_URL."/".dirname(plugin_basename(__FILE__))); // Tabela za pohranjivanje naših recenzija // varijabla $wpdb mora biti deklarirana globalno $this->tbl_adv_reviews = $wpdb ->prefix . "adv_reviews"; // Funkcija koja se izvršava kada je dodatak aktiviran register_activation_hook($this->plugin_name, array(&$this, "aktiviraj")); // Funkcija koja se izvršava kada je dodatak deaktiviran register_deactivation_hook($this->plugin_name, array (&$this, "deactivate")); // Funkcija koja se izvršava prilikom deinstalacije dodatka register_uninstall_hook($this->plugin_name, array(&$this, "uninstall")); )

U konstruktoru objekata koristimo 3 “kuke” ili “kuke” (šta su to?): register_activation_hook, register_deactivation_hook I register_uninstall_hook- ovo su funkcije koje se izvršavaju kada je dodatak aktiviran, deaktiviran, odnosno izbrisan.

Sada direktno implementirajmo ove funkcije.

/** * Aktivirajte dodatak */ function activate() ( globalno $wpdb; require_once(ABSPATH . "wp-admin/upgrade-functions.php"); $table = $this->tbl_adv_reviews; // Odredite verziju mysql-a if ( version_compare(mysql_get_server_info(), "4.1.0", ">=")) ( if (! prazno($wpdb->charset)) $charset_collate = "ZADANI POSTAV ZNAKA $wpdb->charset"; if (! empty( $wpdb->collate)) $charset_collate .= "COLLATE $wpdb->collate"; ) // Struktura naše tabele za recenzije $sql_table_adv_reviews = "CREATE TABLE `".$wpdb->prefix."adv_reviews` (`ID` INT(10) UNSIGNED NULL AUTO_INCREMENT, `review_title` VARCHAR(255) NOT NULL DEFAULT "0", `review_text` TEKST NIJE NULL, `review_date` TIMESTAMP NOT NULL DEFAULT CURRENT_review_name `review_0user_ , `review_user_email` VARCHAR(200) NULL, PRIMARNI KLJUČ (`ID`))".$charset_collate.";"; // Provjerite postojanje tablice if ($wpdb->get_var("prikaži tabele kao što je "".$table .""" ) != $table) ( dbDelta($sql_table_adv_reviews); ) ) /** * Deaktiviraj dodatak */ funkcija deactivate() ( vrati true; ) /** * Uklanjanje dodatka */ funkcija uninstall() ( globalno $wpdb; $wpdb->query("ISPUSTI TABLU AKO POSTOJI ($wpdb->prefix)adv_reviews"); )

Varijabilna $wpdb Odgovoran za upite bazi podataka. Funkcija dbDelta analizira trenutnu strukturu tabele, upoređuje je sa željenom strukturom tabele i dodaje ili modifikuje tabelu po potrebi.

Shodno tome, kada je dodatak aktiviran, kreira se struktura tabele za pohranjivanje recenzija. Kada je dodatak deaktiviran, ništa se ne događa, ali kada se izbriše, brišemo našu tablicu. Akcije se mogu detaljnije razumjeti iz izvornog koda.

Osnovna struktura novog dodatka je spremna. Sada treba da počnemo da pišemo funkcionalni deo. Da bismo to učinili, moramo dodati sljedeće linije koda u konstruktor klase:

// Ako smo u adminu. interfejs if (is_admin()) ( // Dodaj stilove i skripte add_action("wp_print_scripts", array(&$this, "admin_load_scripts")); add_action("wp_print_styles", array(&$this, "admin_load_styles")); // Dodajte meni za dodatak add_action("admin_menu", array(&$this, "admin_generate_menu")); ) else ( // Dodajte stilove i skripte add_action("wp_print_scripts", array(&$this, "site_load_scripts") )) ; add_action("wp_print_styles", array(&$this, "site_load_styles")); add_shortcode("show_reviews", array (&$this, "site_show_reviews")); )

Pogledajmo ovaj dio koda detaljnije. Počnimo s administrativnim panelom.
funkcija " is_admin» provjerava u kojem režimu trenutno radimo - na web stranici ili u kontrolnoj tabli.
Zatim se za funkcije koristi nekoliko kukica:

  • wp_print_scripts- Dodajte potrebne javascript datoteke
  • wp_print_styles- Dodajte potrebne stilove
  • admin_menu- Dodavanje novog menija na kontrolnu tablu

Svaka kuka odgovara implementiranoj metodi u našoj klasi. U kojoj se izvode potrebne operacije.
Pogledajmo kod za povezivanje stilova i skripti

/** * Učitavanje potrebnih skripti za stranicu upravljanja * u administrativnom panelu */ funkcija admin_load_scripts() ( // Registrirajte skripte wp_register_script("advReviewsAdminJs", $this->plugin_url . "js/admin-scripts.js") ; wp_register_script( "jquery", $this->plugin_url . "js/jquery-1.4.2.min.js"); // Dodajte skripte na stranicu wp_enqueue_script("advReviewsAdminJs"); wp_enqueue_script("jquery"); ) /** * Učitavanje potrebnih stilova za kontrolnu stranicu * u administrativnom panelu */ funkcija admin_load_styles() ( // Registracija stilova wp_register_style("advReviewsAdminCss", $this->plugin_url . "css/admin-style.css") ; // Dodaj stilove wp_enqueue_style( "advReviewsAdminCss"); )

Ovdje se koriste sljedeće funkcije.

Svaka radnja zavisi od proslijeđenog parametra “action”, odnosno “edit” - uređivanje recenzije, “submit” - čuvanje uređene recenzije i “delete” - brisanje recenzije.

Razmjena podataka sa stranicama za prikaz odvija se kroz svojstvo objekta “data”. Izvorni kod ovih stranica biće objavljen u arhivi sa ovim modulom na kraju članka. Neću ih ubacivati ​​ovdje, jer je tema već prilično velika.

Ovdje završavamo s administrativnim panelom i prelazimo na prikaz i dodavanje recenzija korisnika.

Da bismo rekli WordPress-u kada da pozove naš dodatak, moramo registrovati “kratki kod”, što je urađeno u konstruktoru naše klase. Pročitajte više o ovome.

Add_shortcode("show_reviews", niz (&$this, "site_show_reviews"));

Sada možete postaviti sljedeći kod na bilo koju stranicu web-mjesta i on će prisiliti funkciju koju smo naveli (proslijedili kao drugi parametar) da se izvrši. Ispod je izvorni kod za ovu funkciju.

/** * Lista recenzija na sajtu */ javna funkcija site_show_reviews($atts, $content=null) ( globalno $wpdb; if (isset($_POST["action"]) && $_POST["action"] = = " add-review") ( $this->add_user_review(); ) // Odaberite sve recenzije iz baze podataka $this->data["reviews"] = $wpdb->get_results("SELECT * FROM `" . $. this- >tbl_adv_reviews . "`", ARRAY_A); ## Omogući baferovanje izlaza ob_start (); include_once("site_reviews.php"); ## Primanje podataka $output = ob_get_contents (); ## Onemogući baferovanje ob_end_clean (); return $output ; ) privatna funkcija add_user_review() ( globalno $wpdb; $inputData = array("review_title" => strip_tags($_POST["review_title"]), "review_text" => strip_tags($_POST["review_text"]) , " review_user_name" => strip_tags($_POST["review_user_name"]), "review_user_email" => strip_tags($_POST["review_user_email"]),); // Dodajte novu recenziju na stranicu $wpdb->insert( $this-> tbl_adv_reviews, $inputData); )

U principu, ovdje nema ništa komplicirano - pravi se SQL upit za odabir podataka, ali ako se prođe parametar "action", tada se prvo dodaje novi pregled. Ali vrijedi obratiti pažnju na puferiranje izlaza. Neophodan je za dobijanje podataka o ubačenoj stranici.

To je sve. Sada možemo vidjeti šta imamo. A preuzimanje dodataka i izvornih kodova možete ovdje.

Naravno, ovo je samo primjer kreiranja dodatka, ali će raditi i kao jednostavna gostujuća aplikacija ako je malo modificirate, na primjer, dodavanjem zaštite od botova i izlaza stranica po stranicu. Sretno kodiranje :)

Obrazac na web stranici:

Kontrolna tabla dodataka:

Recenzija uređivanja:

Možda će vas zanimati i:


Svi webmasteri početnici su uplašeni i odbijeni radom sa kodom - boje se da ne naškode svojoj web stranici dodavanjem HTML-a ili PHP-a ili umetanjem na pogrešno mjesto. Naravno, ako stavite kod na pogrešno mjesto u WordPress-u, možete sve pokvariti. Međutim, ovaj CMS je tako dobro skrojen za početnike da će biti teško pogriješiti.

U ovom članku ćemo pogledati kako sigurno umetnuti HTML ili PHP kod u WordPress. Ali prvo, zašto bi ovo moglo biti korisno.

Zašto ugraditi kod u WordPress

Tokom vijeka trajanja stranice, webmaster će možda morati instalirati kod na WordPress koji se mora izvršiti na stranicama. Ovo može biti potrebno iz različitih razloga: na primjer, instaliranje brojača prometa, nekog neobičnog widgeta ili dodavanje osobnosti šablonu.

WordPress nudi dva načina za instaliranje koda. Pogledajmo ih.

Instalacija pomoću widgeta za tekst

Da biste instalirali kod na WordPress pomoću widgeta, potrebno je da odete na stavku menija u konzoli “Izgled” i pod-stavku “Widgeti”. Među njima, trebali biste pronaći "Text" i mišem ga premjestiti na željeno područje.

Vidžet će se otvoriti i možete popuniti njegov naslov, kao i postaviti potreban kod u odgovarajuće polje. Nakon što kliknete na dugme „Sačuvaj“, operacija će se izvršiti na stranicama sajta.

Ova metoda instaliranja koda na WordPress je pogodna za izvođenje operacija u HTML-u, PHP-u, pa čak i JavaScript-u. Ova metoda se često koristi jer je jednostavna i dobro funkcionira za početnike.

Instalacija u fajl

Instaliranje koda na WordPress pomoću uređivanja datoteka se ne preporučuje početnicima, ali prije ili kasnije svi će ga morati savladati. Ova metoda je zgodna jer se HTML ili PHP mogu postaviti u bilo koji dio, a ne samo u oblast vidžeta, kao što je opisano u prvoj metodi. Nedostatak ove metode instalacije je u tome što može biti opasan i, ako se naprave greške, može dovesti do toga da stranica ne radi. Stoga, prije korištenja ove metode, morate napraviti sigurnosnu kopiju vaših datoteka i baze podataka.

Da biste instalirali kod direktno u datoteku na WordPress-u, morate znati za koje je područje stranice odgovorna određena datoteka. Ovdje je nemoguće dati precizne preporuke, jer u različitim predlošcima različite datoteke obavljaju određene funkcije. Međutim, možete naučiti nešto o datotekama tema. Osim instaliranja koda u datoteku šablona na WordPress-u, to se može uraditi iu datotekama samog CMS-a.

Čitljivost koda je vrlo osjetljiva tema i treba joj posvetiti dužnu pažnju. U ovom članku ćete naučiti 16 tehnika koje će vam pomoći da napredujete u ovoj temi.

1. Komentari i dokumentacija

IDE-ovi postaju sve popularniji u svijetu programera jer... oni pružaju pogodne alate za komentarisanje i dokumentovanje koda.

Evo primjera:

Evo još jednog primjera pozivanja vlastite metode:

U ovom primjeru, stil komentiranja je baziran na PHPDoc-u, a IDE koji koristim je Aptana.

2. Uvlake

Pretpostavljam da već znate važnost uvlačenja u vašem kodu. Općenito, postoji nekoliko stilova oblikovanja koda.

Funkcija foo() ( if ($možda) ( do_it_now(); again(); ) else ( abort_mission(); ) finalize(); )

Funkcija foo() ( if ($možda) ( do_it_now(); again(); ) else ( abort_mission(); ) finalize(); )

Funkcija foo() ( if ($možda) ( do_it_now(); again(); ) else ( abort_mission(); ) finalize(); )

Lično, najčešće koristim stil #2, ali ponekad se prebacim na #1. Ali ovo je sve stvar ukusa, naravno. Najvjerovatnije ne postoji "najbolji" stil koji bi pristajao apsolutno svima. Ova pravila, prije svega, moraju se pridržavati oni koji rade u timu ili učestvuju u pisanju open-source projekata.

Postoje i stilovi koji kombinuju određene karakteristike. Na primjer, standardi za pisanje koda PEAR, gdje vitičasta zagrada "(" u uslovnim izjavama ostaje na istoj liniji, ali se pomiče u funkcijama.

KRUŠKA stil:

Funkcija foo() ( // na novom redu if ($maybe) ( // na istoj liniji do_it_now(); again(); ) else ( abort_mission(); ) finalize(); )

Također treba napomenuti da ovaj stil koristi 4 razmaka umjesto tabulatora.

Možete saznati više o različitim stilovima.

3. Izbjegavajte nepotrebne komentare

Da, kod za komentarisanje je dobar; međutim, nema potrebe pretjerivati. Evo primjera:

// dobijete kod zemlje $country_code = get_country_code($_SERVER["REMOTE_ADDR"]); // ako je država SAD if ($country_code == "SAD") ( // prikaži formu echo form_input_state(); )

Ako je rad koda očigledan, onda najvjerovatnije ne biste trebali pisati nepotrebne komentare.

Ako ih nemate, možete ih malo skratiti:

// prikazuje obrazac ako je zemlja US $country_code = get_country_code($_SERVER["REMOTE_ADDR"]); if ($country_code == "SAD") ( echo form_input_state(); )

4. Grupiranje kodova

Najčešće neki zadaci zahtijevaju pisanje nekoliko linija koda. Stoga je najbolje kombinirati takve zadatke u zasebne blokove odvojene razmacima.

Evo jednostavnog primjera:

// dobijamo listu foruma $forums = array(); $r = mysql_query("IZABIR ID, ime, opis SA foruma"); while ($d = mysql_fetch_assoc($r)) ( $forums = $d; ) // učitaj šablon load_template("header"); load_template("forum_list",$forums); load_template("podnožje");

Ako dodate komentar prije početka svakog bloka, to će dodatno poboljšati čitljivost vašeg koda.

5. Šema imenovanja

Ponekad čak iu PHP jeziku možete pronaći nedosljednosti u imenovanju funkcija. A evo i brojnih primjera:

  • strpos() vs str_split()
  • imagetypes() vs image_type_to_extension()

Postoji nekoliko popularnih stilova:

  • camelCase: veliko slovo svake nove riječi.
  • donje crte: donja crta između riječi: mysql_real_escape_string().

Ako pomiješate ove tehnike, prije ili kasnije možete završiti u nezgodnoj situaciji. Ako radite na projektu koji koristi jednu od ovih tehnika, poželjet ćete slijediti primjer. Ovo još uvijek može ovisiti o programskom jeziku. Na primjer, većina Java programera koristi camelCase, dok PHP programeri preferiraju donje crte.

Ali čak i ovdje je postojao hibrid. Neki programeri koriste donje crte u imenovanju klasa i metoda (izvan klasa), au drugim slučajevima koriste camelCase:

Klasa Foo_Bar ( javna funkcija someDummyMethod() ( ) ) funkcija naziv_procedure() ( )

Još jednom ću reći da ne postoji najbolji stil. Samo se moraš držati nečega.

6. DRY princip

Osušite se (Ne ponavljajte se) - nemojte se ponavljati. Također poznat kao DIE: Dupliciranje je zlo.

Glavni zadatak svakog sistema, bilo da se radi o web aplikaciji ili nečem drugom, je automatizacija zadataka koji se ponavljaju. Ovaj princip treba slijediti uvijek i svuda, posebno ako ste programer. Isti dio koda ne treba ponavljati iznova i iznova.

Na primjer, većina web aplikacija se sastoji od jedne ili više stranica. Jasno je da će ove stranice sadržavati iste elemente. Zaglavlje i podnožje su najupečatljiviji primjeri. Iznenadili biste se koliko ljudi još uvijek duplicira ove elemente na svakoj stranici.

$this->load->view("includes/header"); $this->load->view($main_content); $this->load->view("includes/footer");

7. Izbjegavajte duboko gniježđenje

Čitljivost koda se naglo smanjuje ako imate duboko ugniježđenje.

Funkcija do_stuff() ( // ... if (is_writable($folder)) ( if ($fp = fopen($file_path,"w")) ( if ($stuff = get_some_stuff()) ( if (fwrite($ fp,$stuff)) ( // ... ) else ( vrati false; ) ) else ( vrati false; ) ) else ( vrati false; ) ) else ( vrati false; ) )

Da biste ispravili situaciju, trebali biste ponovo razmotriti kako vaš kod radi i optimizirati ga:

Funkcija do_stuff() ( // ... if (!is_writable($folder)) (vrati false; ) if (!$fp = fopen($file_path,"w")) (vrati false; ) if (!$stuff = get_some_stuff()) ( vrati false; ) if (fwrite($fp,$stuff)) ( // ... ) else ( vrati false; ) )

8. Ograničenje dužine linije

Svi znaju da proces čitanja postaje mnogo ugodniji kada se tekst podijeli u stupce. Ovo je glavni razlog zašto naše novine izgledaju ovako:

Slična tehnika se može primijeniti na naš kod:

// loš $my_email->set_from(" [email protected]")->add_to(" [email protected]")->set_subject("Methods Chained")->set_body("Neka duga poruka")->send(); // dobro $my_email ->set_from(" [email protected]") ->dodaj_u(" [email protected]") ->set_subject("Metode ulančane") ->set_body("Neka duga poruka") ->send(); // loš $query = "ODABIR ID, korisničko ime, ime, prezime, status OD korisnika LIJEVO PRIDRUŽITE se korisničkim objavama KORIŠTENJEM (users.id, user_posts.user_id) WHERE post_id = "123""; // loš $query = "ODABIR ID, korisničko ime, ime, prezime, status FROM korisnika LIJEVO PRIDRUŽI SE korisničkim objavama USING(users.id, user_posts.user_id) GDJE post_id = "123"";

Većina programera drži se ograničenja od 80 i 120 znakova.

9. Organiziranje datoteka i mapa

Tehnički, možete staviti sav kod svoje aplikacije u jednu datoteku :) Ali šta ćete kada trebate nešto promijeniti ili dodati.

Sjećam se svojih prvih projekata u kojima sam prilagao fajlove. Međutim, moja organizacija je bila jako loša. Napravio sam folder “inc” u koji sam postavio nekoliko fajlova: db.php i functions.php. Tokom procesa pisanja aplikacije, ovaj folder je postajao sve veći i na kraju je bilo teško shvatiti šta se gdje nalazi.

Da biste riješili ovaj problem, bolje je koristiti različite vrste okvira ili se barem pridržavati njihove strukture. Ovako izgleda projekat na CodeIgniteru:

10. Imena varijabli

Općenito, imena varijabli trebaju imati potpuno značenje - ovo je idealan slučaj. Izuzetak se može napraviti za privremene varijable.

Pogledajmo nekoliko primjera:

// $i for for petlje ($i = 0; $i< 100; $i++) { // $j для вложенных циклов for ($j = 0; $j < 100; $j++) { } } // $ret для возвращаемых переменных function foo() { $ret["bar"] = get_bar(); $ret["stuff"] = get_stuff(); return $ret; } // $k и $v для foreach foreach ($some_array as $k =>$v) ( ) // $q, $r i $d za mysql $q = "SELECT * FROM table"; $r = mysql_query($q); while ($d = mysql_fetch_assocr($r)) ( ) // $fp za rad sa fajlovima $fp = fopen("file.txt","w");

11 - Napišite ključne riječi u SQL-u velikim slovima

Većina web aplikacija komunicira sa bazama podataka. Ako sami pišete SQL upite, onda i njih treba u skladu s tim formatirati... Nema tu ništa komplikovano. Samo napišite svoje ključne riječi velikim slovima.

12. Odvojite šifru i podatke

Ovo je još jedan princip koji će vam pomoći da pišete razumljivije programe. To uključuje pripremu podataka na jednom mjestu (na primjer, modela) i interakciju s njima na drugom.

Kada je PHP tek počeo da se razvija, više je ličio na šablonski sistem. Projekti na ovom jeziku sadržavali su miješani HTML i PHP kod. Sada se sve promijenilo i svi bi trebali prijeći na sljedeći nivo pisanja aplikacija.

Možete razviti poseban stil za sebe ili možete koristiti najpopularnija sredstva danas.

Popularni PHP okviri:

Sistemi šablona:

Popularni CMS

13. Posebna sintaksa za šablone

Ako ne želite da koristite sistem šablona, ​​onda ćete najverovatnije morati da razvijete sopstveni stil ugrađivanja PHP koda u HTML.

A evo primjera:

Zdravo, korisničko ime; ?>
|

Moja Message Board

naslov; ?>

Forumi kao $forum): ?>

id, $forum->title) ?> (Threads->count(); ?> teme)

opis; ?>

Ova tehnika će vam omogućiti da izbjegnete nepotrebne zagrade. Takođe, takav kod se dobro uklapa u HTML kontekst.

14. Proceduralni i objektno orijentisani pristupi

Objektno orijentirano programiranje će vam pomoći da se držite manje-više jasne strukture, ali to ne znači da biste trebali odstupiti od proceduralnih principa pisanja aplikacija.

Objekti su odlični za predstavljanje podataka. primjer:

Korisnik klase (javno $username; javno $first_name; javno $last_name; javna $e-pošta; javna funkcija __construct() ( // ... ) javna funkcija create() ( // ... ) javna funkcija save() ( / / ... ) javna funkcija delete() ( // ... ) )

Proceduralne metode imaju svoje specifične prednosti.

Funkcija kapitalize($string) ( $ret = strtoupper($string); $ret .= strtolower(substr($string,1)); return $ret; )

15. Pročitajte otvoreni izvorni kod

Projekte otvorenog koda obično piše veliki broj programera. Sa ove tačke gledišta, proučavanje pisanog koda u sličnim projektima može vam pomoći da steknete iskustvo. Zato ne gubite vrijeme na ovo.

16. Refaktoring

Refaktoring je promjena koda bez gubitka funkcionalnosti. Također se može koristiti za poboljšanje čitljivosti.Nema mjesta za ispravljanje grešaka ili dodavanje funkcionalnosti. Vi samo malo promijenite strukturu svog koda.

Nadam se da vam je ovaj članak bio od pomoći! Nedostaje mi nešto? Podijelite svoje iskustvo!

Usuđujem se pretpostaviti da je bilo trenutaka u vašem životu kada ste htjeli dodati (ispraviti) nešto na temu vašeg WP stranice, ili na funkcionalnost nekog dodatka. Štaviše, programeri nisu uključili ovu funkciju u standardne kontrole. A vaša duša ne prepoznaje nikakva ograničenja i zahtijeva letove mašte :) Kao što razumijete, postoji izlaz iz svake situacije, u ovom slučaju ćemo morati ispraviti kod dodatka, teme...

Glavna poteškoća u uređivanju koda je to što se promjene koje napravite, nažalost, ne čuvaju dugo i najvjerovatnije će biti poništene prilikom sljedećeg ažuriranja. Ako je rješenje koje vidite izbjegavanje ažuriranja, usuđujem se da vas odvratim od ove opasne neplemenite odluke, budući da ažuriranja sadrže važne promjene u smislu sigurnosti i ispravke grešaka, a često i dodaju nove funkcije.

Kao rezultat toga, poželjno je koristiti metode koje će ustati u naš svijet koji se dinamički mijenja i istovremeno uštedjeti vaše dragocjeno vrijeme.

Oprez!

Na Internetu često možete pronaći savjete koji predlažu unošenje promjena u datoteku functions.php- ako postoji bilo kakva prilika bez ovoga, bolje je ne dirati ovu datoteku. U metodama ispod vidjet ćete način da to implementirate. I u svakom slučaju, morate kreirati podređenu temu i ne dirati nadređenu.

Kada dodajete prefikse funkciji, uvijek koristite prilagođeni kod u obliku: _prefiks(na naziv funkcije koja se mijenja). Ova radnja će vas zaštititi od sukoba s drugim funkcijama teme ili dodatka.

Dakle, kako dodati kod na WP stranicu?

1) Prilagođeni dodatak

Na ovaj način možete umetnuti isječke koda, koji neće biti obrisani tokom ažuriranja, a možete ih i uređivati, aktivirati u budućnosti ili obrnuto - deaktivirati ih po potrebi.

Ovo je lako učiniti: prvo morate kreirati direktorij za svoj dodatak i imenovati ga u skladu s tim, na primjer moy-plugin (koristite samo crtice, a ne ispod kose crte)

Zatim kreiramo datoteku glavnog dodatka. Kao što razumete, trebalo bi da sadrži naziv, opis i osnovne informacije, kao i kod koji će pomoći da se dodatak zaštiti od uljeza. I mi zovemo ovu datoteku, recimo moy-plugin.php. Ekstenzija .php će reći WP-u na kojem jeziku je datoteka kreirana.

Možete kreirati datoteku koristeći gore opisani metod u bilo kojem uređivaču teksta, na primjer, NotePad, koji je već pažljivo instaliran u Windows operativnom sistemu (TextEdit na Macu). Bolje je ne koristiti Microsoft Word editor, jer on formatira tekst, a nama u ovoj situaciji apsolutno ne treba.

Dakle, evo koda za dodavanje:

A ispod ovog koda izvršite svoje promjene kako to zahtijeva vaša kreativna duša. Nema potrebe dodavati završne PHP oznake na kraju. U tom slučaju, naziv, opis i URL će biti prikazani na vašem admin panelu. I, naravno, "ClubWP" informacije možete zamijeniti svojim vlastitim informacijama

Nakon toga, ostaje samo da spakujete ono što ste kreirali u zip arhivu i pošaljete na ftp svoje stranice. Ubuduće, na ovaj način možete napraviti bilo kakve promjene na svom dodatku.

Na ovaj jednostavan način kreirat ćete jednostavan dodatak za svoje potrebe.

2) Dodatak za isječke koda

Ako vam je gore opisana metoda teška, ili ste vrlo praktična osoba i navikli ste na brže postizanje rezultata, Code Snippets je kreiran posebno za vas. Baš kao i gore opisana funkcija, dodatak dodaje vaš kod uz mogućnost daljeg uređivanja bez upotrebe vaše teme.

Nakon instaliranja dodatka, na admin panelu će se pojaviti novi prozor "Snippets" u koji, shodno tome, možete dodati nove isječke. Za koji možete unijeti kod i informacije o njegovoj namjeni.

Dakle, imate mogućnost da omogućite ili onemogućite prilagođeni kod u obliku dodataka. Veoma zgodno i praktično, jer... Ponekad može doći do sukoba s temama i dodacima, a to možete lako razumjeti i onemogućiti generirani kod.

3) Uređivanje Functions.php podređene teme

Ako upotreba dodataka nije prikladna za vas i trebate unijeti izmjene direktno u temu svoje stranice, onda je ova metoda za vas. Dozvolite mi da vas podsjetim da ovo možete učiniti samo s dječjim temama.

Da bih koristio ovu metodu, nudim svoj šablon functions.php dječja tema. Raspakujte i uredite datoteku style.css(ime šablona i URL za uvoz)

P.S. Pokušajte učiniti sve što je moguće da pojednostavite svoj život u budućnosti, uključujući i vaš težak dio eliminacije grešaka i uređivanja prilagođenog koda prema potrebi.