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

Kako bi osigurali da je kod WordPressa posvuda dizajniran u istom stilu i da je lako čitljiv u jezgri, dodacima i temama, preporučuje se slijediti standarde kodiranja koje su usvojili programeri WordPressa. Ovi standardi su vrlo slični standardu PEAR, ali postoje značajne razlike. Preporučam da se s njima upoznate i, ako je moguće, slijedite ih pri izradi dodataka ili tema.

Osim standarda za pisanje samog PHP koda, postoje i standardi za dokumentiranje koda - to su komentari na funkcije i zakačke: PHP Documentation Standards (engleski)

Jednostruki i dvostruki navodnici

Ako u nizu nema varijabli, koristite jednostruke navodnike, inače dvostruke navodnike. Nema potrebe izbjegavati navodnike u nizu, a ako ih ima, preporuča se izmjenjivati ​​ih:

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 pisanje, varijable moraju biti izbrisane unaprijed. Općenito, takva se snimka može smatrati neprihvatljivom! Pogledajte odjeljak s uputama o sigurnom izlazu.

Udubljenja

Uvlačenje bi uvijek trebalo pokazati logičku strukturu koda. Koristite tabulatore (tipka Tab) umjesto razmaka - to daje veću fleksibilnost. Razmake treba koristiti kada morate nešto poravnati unutar retka.

Pravilo: tabulatore treba koristiti na početku retka za uvlačenje, dok se razmaci mogu koristiti u sredini retka za poravnanje.

If (uvjet) ( $foo = "somevalue"; $foo2 = "somevalue2"; $foo_bar = "somevalue3"; $foo5 = "somevalue4"; )

A ovako kod izgleda ako prikažete nevidljive tabulatore i razmaknice:

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

Za asocijativne nizove, vrijednosti moraju započeti u novom retku. 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".=> "neka vrijednost3",);

Stil vitičastih zagrada

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

If (uvjet) ( radnja1(); radnja2(); ) elseif (uvjet2 && uvjet3) ( radnja3(); akcija4(); ) else (zadanaakcija(); )

Ako postoji dugačak blok, treba ga rastaviti na dva ili više kratkih blokova ili funkcija ako je moguće. Ako je tako dugačak blok neophodan, dodajte kratki komentar na kraju kako bi bilo jasno što točno zatvara vitičasta zagrada. Ovaj pristup je logično koristiti za blok s 35 ili više redaka.

Svaki kôd koji nije intuitivan treba komentirati.

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

If (uvjet) ( action0(); ) if (uvjet) ( action1(); ) elseif (uvjet2) ( action2a(); action2b(); ) foreach ($items as $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 = "dangerous""; // neobrađeni podaci koji se mogu ili ne moraju izbjeći $id = some_foo_number(); // podaci se očekuju kao broj, ali nismo sigurni $wpdb->query($wpdb-> pripremi( "UPDATE $wpdb->posts SET post_title = %s WHERE ID = %d", $var, $id));

%s se koristi za nizove, a %d za cijele brojeve. Napominjemo da nisu "pod navodnicima"! $wpdb->prepare() sam izbjegava nizove i dodaje navodnike ako je potrebno. Prednost pripreme() je u tome što se ne morate sjećati da ručno koristite esc_sql(), a također i to što je niz upita s rezerviranim mjestima vizualniji nego da koristi varijable omotane u esc_sql().

Upiti u bazi podataka

Pokušajte ne pisati izravne upite bazi podataka. Ako postoji odgovarajuća funkcija, a ima ih mnogo u WP-u, koja može dobiti potrebne podatke, upotrijebite je.

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

Imena klasa, funkcija, datoteka, konstanti, varijabli

Nazivi funkcija, varijabli, kuke

Koristite mala slova a-z u varijablama, kukama i imenima funkcija, a nikada CamelCase. Pojedinačne riječi odvojite podvlakom _. Nemojte skraćivati ​​imena varijabli osim ako je potrebno; držati kôd nedvosmislenim i samodokumentirajućim.

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

Nazivi klasa

Morate koristiti riječi s velikim_slovom odvojenim podvlakom. Sve kratice (akronimi, kratice) moraju biti VELIKA SLOVA.

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

Konstante moraju biti riječi VELIKIM SLOVIMA odvojene podvlakom:

Define("DOING_AJAX", true);

Imena datoteka

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

Moj-naziv-dodatka.php

Nazivi datoteka klasa

Treba se temeljiti na nazivu klase s prefiksom class- , podvlake u nazivu klase zamjenjuju se crticom, na primjer WP_Error postaje:

Class-wp-error.php

Ovaj standard imenovanja 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. , točka iza riječi klasa umjesto crtice.

Jasne vrijednosti varijabli u parametrima funkcije

Booleove vrijednosti imaju prednost nad vrijednostima niza. Oni. Umjesto true/false pri pozivanju funkcija, bolje je koristiti neku vrstu niza koji objašnjava vrijednost parametra.

Loš kod:

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

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

Dobar kod:

Funkcija jesti($što, $brzina = "polako") ( ... ) jesti("gljive"); jesti ("gljive", "polako"); jesti("probna hrana", "brzo");

Kada trebate više parametara funkcije, upotrijebite polje $args. Još je bolji!

Vrlo dobar kod:

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

Interpolacija za dinamička imena kuka

Za lakšu čitljivost i otkrivanje, zakačke s varijablama u svojim nazivima trebaju biti interpolirane (uvrštene u vitičaste zagrade ( i )) i ne smiju se spajati:

Zagrade su potrebne kako bi PHP mogao ispravno raščlaniti tipove podataka varijabli u interpoliranom nizu.

// ispravi do_action("($new_status)_($post->post_type)", $post->ID, $post); // netočna do_action($new_status "_". $post->post_type, $post->ID, $post);

Gdje je to 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 operator

Ternarni operatori su dobri, ali preporučuju da uvijek testirate istinitu izjavu, a ne lažnu izjavu. U protivnom jednostavno dovodi u zabludu zbog dvostrukog negativa. Izuzetak je korištenje! prazni() jer je ponekad to jednostavno teško napisati na bilo koji drugi način.

Kako provjeriti:

// (ako je uvjet istinit = istinit) ? (onda radimo ovo) : (inače ovo); $music_type = ("jazz" == $music) ? "cool" : "blah"; // (ako vrijednost nije prazna - ! prazna) ? (onda radimo ovo) : (inače ovo);

Kako ne napisati:

// (ako uvjet nije ispunjen!= istina) ? (onda radimo ovo) : (inače ovo); $music_type = ("jazz" != $music) ? "blah" : "cool";

Uvjeti majstora Yode

Prilikom izvođenja logičkih usporedbi uvijek stavljajte konstante ili literale s lijeve strane, a varijable s desne strane.

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

Ako izostavimo drugi znak = u gornjem primjeru (doduše, to se događa i najiskusnijima od nas), dobit ćemo PHP grešku i odmah ćemo je vidjeti jer kod neće raditi. Ali da je konstrukcija suprotna - $the_force = true , tada bi uvjet 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 ovaj "naopaki" pravopis.

Ovo se također odnosi na == , != , === i !== . "Yodini uvjeti" za< , > , <= или >= puno teže za čitanje i bolje ih je ne koristiti ovdje.

Pametni kod

Ukratko, čitljivost koda bi trebala biti u prvom planu, ona je važnija od kratkoće ili nekih ne očitih, ali zgodnih kratica.

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

Da - ovo je super snimka, jasno je da ju je napravio iskusni programer. Ali bilo koji drugi programer, a često i autor, da bi razumio takav zapis mora se malo udubiti i potrošiti dodatne sekunde ili minute. Ovo nije očit ni jasan unos i treba ga izbjegavati, a bolje ga je pisati duže, ali jasnije:

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

Operator za suzbijanje pogrešaka @

PHP podržava jedan operator kontrole pogrešaka: znak @. U slučaju da prethodi bilo kojem izrazu u PHP kodu, sve poruke o pogrešci koje generira taj izraz bit će zanemarene.

Iako ovaj operator postoji u kernelu, često se koristi jer je netko previše lijen da pravilno obradi varijablu. Njegova upotreba je snažno Ne preporučuje se jer čak i PHP dokumentacija navodi:

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

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

Odete u “skladište” wordpress dodataka i otkrijete da dodatak koji vam treba nije tamo. Što uraditi? Što da napravim? Ako ste barem malo upoznati s osnovama programiranja u PHP-u, izgledom, onda vam neće biti teško Sami napišite dodatak za WordPress.

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

P.s. Ako ne znate php i layout... ne brinite, zamolite nekoga da vam napiše potrebne funkcionalnosti :)

Prije nego počnete pisati dodatak, trebate pogledati dokumentaciju WordPressa, koja opisuje osnovne principe pisanja dodataka i neke primjere koda.

Neću umnožavati ove informacije, već ću prijeći odmah na pisanje koda.

Napišimo jednostavan dodatak koji će vam omogućiti spremanje i prikaz recenzija o vašoj web stranici. Naravno, takvi dodaci već postoje, ali ovo će poslužiti kao primjer.

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

Zatim ćemo stvoriti novi direktorij “advuserreviews” u direktoriju vaše stranice “/wp-content/plugins/”. I u njemu ćemo stvoriti datoteku “advuserreviews.php”. Ovo će biti glavna datoteka koja će biti odgovorna za opću inicijalizaciju. (Preporučljivo je koristiti UTF-8 kodiranje za datoteke).

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

Sada, ako odete na upravljačku ploču, možete vidjeti da je sustav pronašao novi dodatak i ponudio da ga aktivirate. Ali još je prerano za to.

Napisat ćemo naš novi dodatak u OOP stilu i sva obrada podataka bit će smještena u jednoj datoteci. Kreirajmo glavni kostur datoteke.

// Zaustavi izravni poziv if(preg_match("#" . basename(__FILE__) . "#", $_SERVER["PHP_SELF"])) ( die("Nije vam dopušteno izravno pozvati ovu stranicu."); ) ako (!class_exists("AdvUserReviews")) ( class AdvUserReviews ( // Pohranjivanje internih podataka public $data = array(); // Konstruktor objekta // Funkcija inicijalizacije glavnih varijabli AdvUserReviews() ( ) ) ) global $rprice; $rpcijena = nova AdvUserReviews();

Dodajmo sada sljedeći kod u konstruktor objekta:

Funkcija AdvUserReviews() ( global $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__))); // Tablica za pohranu naših recenzija // varijabla $wpdb mora biti deklarirana globalno $this->tbl_adv_reviews = $wpdb ->prefiks . "adv_reviews"; // Funkcija koja se izvršava kada je dodatak aktiviran register_activation_hook($this->plugin_name, array(&$this, "activate")); // 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 objekta koristimo 3 "kuke" ili "kuke" (što su one?): kuka_za_aktivaciju_registra, kuka_za_deaktivaciju_registra I kuka_za_deinstaliranje- ovo su funkcije koje se izvode kada se dodatak aktivira, deaktivira i izbriše.

Sada izravno implementirajmo ove funkcije.

/** * Aktivirajte dodatak */ function activate() ( global $wpdb; require_once(ABSPATH . "wp-admin/upgrade-functions.php"); $table = $this->tbl_adv_reviews; // Odredite mysql verziju if ( version_compare(mysql_get_server_info(), "4.1.0", ">=")) ( if (! empty($wpdb->charset)) $charset_collate = "ZADANI SKUP ZNAKOVA $wpdb->charset"; if (! empty( $wpdb->collate)) $charset_collate .= "COLLATE $wpdb->collate"; ) // Struktura naše tablice 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` TEXT NOT NULL, `review_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `review_user_name` VARCHAR(200) NULL , `review_user_email` VARCHAR(200) NULL, PRIMARY KEY (`ID`))".$charset_collate.";"; // Provjerite postojanje tablice if ($wpdb->get_var("prikaži tablice poput "".$table .""" ) != $table) ( dbDelta($sql_table_adv_reviews); ) ) /** * Deaktiviraj dodatak */ funkcija deactivate() ( return true; ) /** * Uklanjanje dodatka */ function uninstall() ( global $wpdb; $wpdb->query("ISPUSTI TABLICU AKO POSTOJI ($wpdb->prefix)adv_reviews"); )

Varijabilna $wpdb Odgovoran za upite prema bazi podataka. Funkcija dbDelta analizira trenutnu strukturu tablice, uspoređuje je sa željenom strukturom tablice i prema potrebi dodaje ili modificira tablicu.

U skladu s tim, kada se dodatak aktivira, kreira se struktura tablice za pohranjivanje recenzija. Kada je dodatak deaktiviran, ne događa se nikakva radnja, ali kada se izbriše, brišemo našu tablicu. Radnje se mogu detaljnije razumjeti iz izvornog koda.

Osnovna struktura novog dodatka je spremna. Sada moramo početi pisati funkcionalni dio. Da bismo to učinili, moramo dodati sljedeće retke koda u konstruktor klase:

// Ako smo u admin. sučelje 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")); // Dodavanje izbornika za dodatak add_action("admin_menu", array(&$this, "admin_generate_menu")); ) else ( // Dodavanje stilova i skripti 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 administracijskom pločom.
funkcija " je_admin» provjerava u kojem načinu trenutno radimo - na web stranici ili u upravljačkoj ploči.
Zatim se nekoliko kukica koristi za funkcije:

  • wp_print_skripte- Dodajte potrebne javascript datoteke
  • wp_print_styles- Dodajte potrebne stilove
  • admin_menu- Dodavanje novog izbornika na upravljačku ploču

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

/** * Učitavanje potrebnih skripti za stranicu upravljanja * na administrativnoj ploči */ 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"); // Dodavanje skripti na stranicu wp_enqueue_script("advReviewsAdminJs"); wp_enqueue_script("jquery"); ) /** * Učitavanje potrebnih stilova za kontrolnu stranicu * na administrativnoj ploči */ funkcija admin_load_styles() ( // Registrirajte stilove wp_register_style("advReviewsAdminCss", $this->plugin_url . "css/admin-style.css") ; // Dodavanje stilova wp_enqueue_style( "advReviewsAdminCss"); )

Ovdje se koriste sljedeće funkcije.

Svaka akcija ovisi o proslijeđenom parametru “action”, odnosno “edit” - uređivanje recenzije, “submit” - spremanje uređene recenzije i “delete” - brisanje recenzije.

Razmjena podataka sa stranicama za prikaz odvija se putem svojstva objekta "podaci". Izvorni kod ovih stranica bit će objavljen u arhivi s ovim modulom na kraju članka. Neću ih stavljati ovdje, jer je tema već prilično velika.

Ovdje završavamo s administracijskom pločom i prelazimo na prikazivanje i dodavanje recenzija korisnika.

Da bismo rekli WordPressu kada treba pozvati naš dodatak, moramo registrirati "shortcode", što je učinjeno u konstruktoru naše klase. Pročitajte više o ovome.

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

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

/** * Popis recenzija na web mjestu */ 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 spremanje međuspremnika ob_start (); include_once("site_reviews.php"); ## Primi podatke $output = ob_get_contents (); ## Onemogući spremanje međuspremnika 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 - SQL upit se pravi za odabir podataka, ali ako se proslijedi parametar "radnja", prvo se dodaje novi pregled. Ali vrijedi obratiti pozornost na izlazni međuspremnik. Neophodno je za dobivanje podataka umetnute stranice.

To je sve. Sada možemo vidjeti što imamo. A preuzmite dodatak i izvorne kodove možete ovdje.

Naravno, ovo je samo primjer stvaranja dodatka, ali će također raditi kao jednostavna aplikacija za goste ako je malo izmijenite, na primjer, dodavanjem zaštite od botova i ispisa stranicu po stranicu. Sretno kodiranje :)

Obrazac na web stranici:

Upravljačka ploča dodatka:

Pregled uređivanja:

Moglo bi vas također zanimati:


Svi webmasteri početnici plaše se i obeshrabruju rad s kodom - boje se da će naštetiti svojoj stranici dodavanjem HTML-a ili PHP-a ili umetanjem na krivo mjesto. Naravno, ako stavite kod na krivo mjesto u WordPressu, možete sve pokvariti. Međutim, ovaj CMS je toliko dobro prilagođen početnicima 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

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

WordPress nudi dva načina instaliranja koda. Pogledajmo ih.

Instalacija pomoću widgeta Tekst

Kako biste instalirali kod na WordPress pomoću widgeta, morate otići na stavku izbornika u konzoli “Izgled” i podstavku “Widgeti”. Među njima trebate pronaći "Tekst" i premjestiti ga mišem na željeno područje.

Widget će se otvoriti i možete ispuniti njegov naslov, kao i postaviti traženi kod u odgovarajuće polje. Nakon klika na gumb "Spremi", operacija će se izvršiti na stranicama web mjesta.

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

Instalacija u datoteku

Instaliranje koda na WordPressu pomoću uređivanja datoteka ne preporučuje se početnicima, ali prije ili kasnije svi će to morati savladati. Ova metoda je praktična jer se HTML ili PHP mogu postaviti u bilo koji dio, ne samo u područje widgeta, kao što je opisano u prvoj metodi. Nedostatak ove metode instalacije je što može biti opasna i, ako se naprave pogreške, može dovesti do toga da stranica ne radi. Stoga prije korištenja ove metode morate napraviti sigurnosnu kopiju svojih datoteka i baze podataka.

Da biste instalirali kod izravno u datoteku na WordPressu, morate znati za koje je područje web stranice određena datoteka odgovorna. 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 predloška na WordPressu, to se može učiniti i u datotekama samog CMS-a.

Čitljivost koda vrlo je osjetljiva tema i treba joj posvetiti dužnu pozornost. U ovom ćete članku 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... pružaju praktične alate za komentiranje i dokumentiranje koda.

Evo primjera:

Evo još jednog primjera pozivanja vlastite metode:

U ovom primjeru, stil komentiranja temelji se na PHPDocu, 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(); )

Osobno najčešće koristim stil #2, ali ponekad prijeđem na #1. Ali sve je to stvar ukusa, naravno. Najvjerojatnije ne postoji "najbolji" stil koji bi odgovarao apsolutno svima. Ova se pravila prije svega trebaju pridržavati oni koji rade u timu ili sudjeluju u pisanju open-source projekata.

Postoje i stilovi koji kombiniraju određene karakteristike. Na primjer, standardi za pisanje koda PEAR, gdje vitičasta zagrada "(" u uvjetnim izjavama ostaje u istom retku, ali se premješta u funkcijama.

PEAR stil:

Funkcija foo() ( // u novom retku if ($možda) ( // u istom retku 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 komentiranje je dobar; međutim, ne treba pretjerivati. Evo primjera:

// dobivanje koda zemlje $country_code = get_country_code($_SERVER["REMOTE_ADDR"]); // ako je zemlja SAD if ($country_code == "US") ( // prikaži obrazac echo form_input_state(); )

Ako je rad koda očit, onda najvjerojatnije ne biste trebali pisati nepotrebne komentare.

Ako ih nemate, možete ih malo skratiti:

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

4. Grupiranje kodova

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

Evo jednostavnog primjera:

// dobivanje popisa foruma $forums = array(); $r = mysql_query("SELECT id, ime, opis IZ foruma"); while ($d = mysql_fetch_assoc($r)) ( $forums = $d; ) // učitaj predložak 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. Shema imenovanja

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

  • strpos() vs str_split()
  • imagetypes() u odnosu na image_type_to_extension()

Postoji nekoliko popularnih stilova:

  • camelCase: veliko slovo svake nove riječi.
  • podvlake: Podvlaka između riječi: mysql_real_escape_string().

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

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

Klasa Foo_Bar ( javna funkcija someDummyMethod() ( ) ) funkcija procedural_function_name() ( )

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

6. SUHO načelo

DRY (Don’t Repeat Yourself) – ne ponavljajte se. Također poznat kao DIE: Duplication is Evil.

Glavna zadaća svakog sustava, bilo da se radi o web aplikaciji ili nečem drugom, jest automatizirati zadatke koji se ponavljaju. Ovo načelo treba slijediti uvijek i svugdje, pogotovo ako ste programer. Isti dio koda ne bi se trebao ponavljati iznova i iznova.

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

$this->load->view("uključuje/zaglavlje"); $this->load->view($main_content); $this->load->view("uključuje/podnožje");

7. Izbjegavajte duboko gniježđenje

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

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

Kako biste ispravili situaciju, trebali biste ponovno razmotriti kako vaš kod radi i optimizirati ga:

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

8. Ograničenje duljine linije

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

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

// loš $my_email->set_from(" [e-mail zaštićen]")->dodaj_u(" [e-mail zaštićen]")->set_subject("Methods Chained")->set_body("Neka duga poruka")->send(); // dobar $my_email ->set_from(" [e-mail zaštićen]") ->dodaj_u(" [e-mail zaštićen]") ->set_subject("Methods Chained") ->set_body("Some long message") ->send(); // bad $query = "SELECT id, username, first_name, last_name, status FROM users LEFT JOIN user_posts USING (users.id, user_posts.user_id) WHERE post_id = "123""; // bad $query = "SELECT id, korisničko ime, first_name, last_name, status FROM korisnika LEFT JOIN user_posts USING(users.id, user_posts.user_id) WHERE post_id = "123"";

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

9. Organiziranje datoteka i mapa

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

Sjećam se svojih prvih projekata u kojima sam prilagao datoteke. Međutim, moja je organizacija bila vrlo loša. Napravio sam mapu “inc” u koju sam smjestio nekoliko datoteka: db.php i functions.php. Tijekom procesa pisanja aplikacije, ova mapa je postajala sve veća i veća i na kraju je bilo teško dokučiti što se gdje nalazi.

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

10. Imena varijabli

Općenito, nazivi varijabli trebaju imati potpuno značenje - ovo je idealan slučaj. Iznimka 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_upit($q); while ($d = mysql_fetch_assocr($r)) ( ) // $fp za rad s datotekama $fp = fopen("file.txt","w");

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

Većina web aplikacija komunicira s bazama podataka. Ako sami pišete SQL upite, onda ih također treba formatirati u skladu s tim... Ovdje nema ništa komplicirano. Samo napišite svoje ključne riječi velikim slovima.

12. Odvojite šifru i podatke

Ovo je još jedno načelo koje će vam pomoći da napišete razumljivije programe. Uključuje pripremu podataka na jednom mjestu (na primjer, modele) i interakciju s njima na drugom.

Kada se PHP prvi put počeo razvijati, bio je više poput sustava za izradu šablona. 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ću razinu pisanja zahtjeva.

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

Popularni PHP okviri:

Sustavi predložaka:

Popularni CMS

13. Posebna sintaksa za predloške

Ako ne želite koristiti sustav predložaka, tada ćete najvjerojatnije morati razviti vlastiti stil ugrađivanja PHP koda u HTML.

Evo primjera:

Zdravo, Korisničko ime; ?>
|

Moja ploča s porukama

titula; ?>

Forumi kao $forum): ?>

id, $forum->title) ?> (Niti->broj(); ?> niti)

opis; ?>

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

14. Proceduralni i objektno orijentirani pristupi

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

Objekti su izvrsni za predstavljanje podataka. Primjer:

Korisnik klase ( public $username; public $first_name; public $last_name; public $email; public function __construct() ( // ... ) public function create() ( // ... ) public function save() ( / / ... ) javna funkcija delete() ( // ... ) )

Proceduralne metode imaju svoje posebne prednosti.

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

15. Čitajte otvoreni izvorni kod

Projekte otvorenog koda obično piše velik broj programera. S ove točke gledišta, proučavanje pisanog koda u sličnim projektima može vam pomoći u stjecanju iskustva. Stoga ne gubite vrijeme na ovo.

16. Refaktoriranje

Refactoring 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. Samo malo promijenite strukturu svog koda.

Nadam se da vam je ovaj članak bio od pomoći! Propuštam li 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 svoje WP stranice, ili na funkcionalnosti nekog dodatka. Štoviše, programeri nisu uključili ovu značajku u standardne kontrole. A vaša duša ne poznaje nikakva ograničenja i zahtijeva maštu :) Kao što razumijete, postoji izlaz iz svake situacije, u ovom slučaju morat ćemo ispraviti kod dodatka, teme...

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

Kao rezultat toga, poželjno je koristiti metode koje će izdržati u našem svijetu koji se dinamično mijenja i istovremeno uštedjeti vaše dragocjeno vrijeme.

Oprez!

Na internetu često možete pronaći savjete koji sugeriraju izmjene datoteke funkcije.php- ako postoji bilo kakva prilika da to učinite bez ovoga, bolje je ne dirati ovu datoteku. U dolje navedenim metodama vidjet ćete način kako to implementirati. I u svakom slučaju, trebate stvoriti 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 će vas radnja 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, a oni se neće izbrisati tijekom ažuriranja, a možete ih i uređivati, aktivirati u budućnosti ili obrnuto - po potrebi ih deaktivirati.

To je lako učiniti: prvo trebate stvoriti direktorij za svoj dodatak i nazvati ga u skladu s tim, na primjer moy-plugin (koristite samo crtice, ne kose crte)

Zatim stvaramo glavnu datoteku dodatka. Kao što razumijete, trebao bi sadržavati naziv, opis i osnovne informacije, kao i kod koji će pomoći u zaštiti dodatka od uljeza. I zovemo ovu datoteku, recimo moy-plugin.php. Ekstenzija .php reći će WP-u na kojem je jeziku datoteka stvorena.

Datoteku možete izraditi koristeći gore opisanu metodu u bilo kojem uređivaču teksta, na primjer, u NotePadu, koji je već pažljivo instaliran u operacijskom sustavu Windows (TextEdit na Macu). Bolje je ne koristiti Microsoft Word uređivač, jer on formatira tekst, a apsolutno nam ne treba u ovoj situaciji.

Evo koda za dodavanje:

A ispod ovog koda unesite promjene kako vaša kreativna duša zahtijeva. Nema potrebe dodavati završne PHP oznake na kraju. U tom će slučaju naziv, opis i URL biti prikazani na vašoj administratorskoj ploči. I, naravno, možete zamijeniti podatke "ClubWP" svojim podacima

Nakon toga preostaje samo spakirati ono što ste napravili u zip arhivu i poslati na ftp svoje stranice. Ubuduće na ovaj način možete izvršiti bilo kakve promjene u svom dodatku.

Na ovaj jednostavan način izradit ć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 brže dobivati ​​rezultate, Code Snippets stvoren je posebno za vas. Baš kao i gore opisana značajka, dodatak dodaje vaš kod s mogućnošću daljnjeg uređivanja bez korištenja vaše teme.

Nakon instaliranja dodatka, u administratorskoj ploči pojavit će se novi prozor "Isječci", u koji, sukladno tome, možete dodati nove isječke. Za koji možete unijeti kod i podatke o njegovoj namjeni.

Dakle, imate mogućnost omogućiti ili onemogućiti prilagođeni kod u obliku dodataka. Vrlo 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 vam upotreba dodataka nije prikladna i trebate unijeti promjene izravno u temu svoje web-lokacije, onda je ova metoda za vas. Dopustite mi da vas podsjetim da to možete učiniti samo s dječjim temama.

Za korištenje ove metode nudim svoj predložak funkcije.php dječja tema. Raspakirajte i uredite datoteku stil.css(naziv predloška i URL uvoza)

p.s. Pokušajte učiniti sve što je moguće kako biste pojednostavili svoj život u budućnosti, uključujući naporan dio uklanjanja grešaka i uređivanja prilagođenog koda prema potrebi.