Kreiranje custom plugin-a: Osnovni PHP tutorijal
Kreiranje custom plugin-a za WordPress predstavlja jedan od najmoćnijih načina da proširite funkcionalnost svog sajta i prilagodite ga svojim jedinstvenim potrebama. Za razliku od tema koje kontrolišu izgled, plugin-ovi se bave funkcionalnošću – dodaju nove mogućnosti ili modifikuju postojeće bez uticaja na dizajn. U ovom sveobuhvatnom vodiču, provest ćemo vas kroz osnove kreiranja WordPress plugin-a koristeći PHP, od osnovne strukture do praktičnih primera koji će vam omogućiti da stvorite svoj prvi funkcionalni dodatak.
Zašto kreirati sopstveni WordPress plugin?
WordPress plugin arhiva sadrži preko 60.000 besplatnih plugin-ova, ali često ćete naići na situacije gdje ni jedan od postojećih ne zadovoljava vaše specifične zahteve. Prema istraživanju W3Techs, WordPress pokreće preko 43% svih veb-sajtova na internetu, što čini znanje o kreiranju plugin-ova izuzetno vrednom veštinom. Vaš custom plugin može rešiti jedinstvene probleme vašeg poslovanja, automatizovati specifične procese ili integrisati vaš sajt sa eksternim sistemima na način koji gotovi plugin-ovi ne mogu.
Kreiranje sopstvenog plugin-a donosi nekoliko ključnih prednosti: potpunu kontrolu nad funkcionalnošću, bolju optimizaciju performansi jer uključuje samo kod koji vam je potreban, povećanu bezbednost jer znate tačno šta se izvršava na vašem sajtu, i lakše održavanje jer ne zavistite od trećih strana za ažuriranja. Za poslovne sajtove, custom plugin-ovi često postaju konkurentska prednost koja diferencira vašu online prisutnost.
Osnovna struktura WordPress plugin-a
Minimalna struktura fajla
Svaki WordPress plugin, bez obzira na kompleksnost, zahteva određenu osnovnu strukturu. Najjednostavniji plugin se sastoji od samo jednog PHP fajla sa komentarima na vrhu koji ga identifikuju WordPress sistemu. Ovi komentari su obavezni i WordPress ih koristi za prikazivanje informacija o plugin-u u administraciji.
Osnovni strukturni elementi uključuju:
- Glavni PHP fajl koji nosi ime plugin-a (npr.
moj-prvi-plugin.php) - Informacioni komentar na početku fajla sa metapodacima
- Funkcije i klase koje implementiraju željenu funkcionalnost
- Opcionalno: CSS fajlovi, JavaScript fajlovi, jezički fajlovi, slike i drugi resursi
Evo primera minimalnog plugin-a koji ne radi ništa osim što se identifikuje sistemu:
<?php
/**
* Plugin Name: Moj prvi custom plugin
* Plugin URI: https://wpmentor.rs/blog/
* Description: Ovo je moj prvi custom plugin za WordPress
* Version: 1.0.0
* Author: Vaše Ime
* License: GPL v2 ili kasnije
* Text Domain: moj-prvi-plugin
*/
Čak i ovako jednostavan plugin će se pojaviti u listi plugin-ova u WordPress administraciji i moći ćete ga aktivirati ili deaktivirati. Tekst domen (Text Domain) je važan za internacionalizaciju i omogućava prevod plugin-a na druge jezike.
Organizacija kompleksnijih plugin-ova
Kako vaš plugin raste u funkcionalnosti, važno je održavati čistu i organizovanu strukturu. Preporučena organizacija za veće plugin-ove uključuje:
moj-plugin/
├── moj-plugin.php (glavni fajl)
├── includes/ (direktorijum za PHP klase i funkcije)
│ ├── class-osnovne-funkcije.php
│ └── class-admin-podesavanja.php
├── admin/ (administrativni delovi)
│ ├── css/
│ ├── js/
│ └── partials/ (delimični šablon fajlovi)
├── public/ (javni delovi)
│ ├── css/
│ ├── js/
│ └── partials/
├── assets/ (zajednički resursi)
│ ├── images/
│ └── fonts/
├── languages/ (jezički fajlovi)
└── uninstall.php (skripta za deinstalaciju)
Ova modularna struktura omogućava lakše održavanje, bolju organizaciju koda i jasno razdvajanje administrativnog i javnog koda. Svaka klasa ili skup funkcionalnosti treba da bude u zasebnom fajlu, što olakšava debugovanje i testiranje.
Hukovi (Hooks): Akcije i filteri
Razumevanje WordPress hook sistema
Srce WordPress ekstenzibilnosti leži u njegovom hook sistemu, koji omogućava plugin-ovima da modifikuju ili prošire defaultno ponašanje bez modifikacije jezgra sistema. Postoje dve vrste hook-ova: akcije i filteri.
Akcije vam omogućavaju da izvršite dodatni kod u specifičnim tačkama tokom izvršavanja WordPress-a. Na primer, možete dodati funkcionalnost koja se izvršava kada se objavi post, kada se korisnik prijavi, ili kada se učita administracioni panel. Akcije ne vraćaju vrednost sistemu – oni jednostavno izvršavaju kod.
Filteri vam omogućavaju da modifikujete podatke pre nego što se prikažu korisniku ili sačuvaju u bazi. Na primer, možete promeniti sadržaj posta pre prikaza, modifikovati naslov, ili formatirati izlazne podatke. Filteri uvek vraćaju modifikovanu vrednost.
Praktični primeri korišćenja hook-ova
Evo primera kako koristiti akciju da dodate poruku dobrodoslice u podnožje administracionog panela:
// Dodavanje teksta u admin footer koristeći akciju
add_action('admin_footer', 'moj_plugin_dodaj_footer_tekst');
function moj_plugin_dodaj_footer_tekst() {
echo '<p>Ovaj sajt koristi Moj Prvi Plugin. <a href="https://wpmentor.rs/blog/">Posetite WP Mentor za više saveta</a>.</p>';
}
A sada primer korišćenja filtera da modifikujete dužinu izvoda (excerpt) postova:
// Promena dužine excerpta sa 55 na 30 reči
add_filter('excerpt_length', 'moj_plugin_podesi_duzinu_excerpta');
function moj_plugin_podesi_duzinu_excerpta($duzina) {
return 30;
}
// Dodavanje "Pročitaj više" linka na kraj excerpta
add_filter('excerpt_more', 'moj_plugin_novi_excerpt_more');
function moj_plugin_novi_excerpt_more($more) {
return '... <a href="' . get_permalink() . '">Pročitaj više</a>';
}
Prema istraživanju WordPress.org, plugin-ovi koji pravilno koriste hook sistem imaju 47% manje konflikata sa drugim plugin-ovima i temama. Ovo je kritično za stabilnost vašeg sajta, posebno ako koristite više plugin-ova istovremeno.
Kreiranje administracionog interfejsa
Dodavanje stranica u admin meni
Većina plugin-ova zahteva neki oblik administracionog interfejsa gde korisnici mogu da konfigurišu podesavanja. WordPress pruža nekoliko funkcija za dodavanje stranica u administracioni meni, u zavisnosti od toga gde želite da se vaša stranica pojavi.
Evo primera dodavanja glavne meni stavke za vaš plugin:
// Dodavanje glavne meni stavke
add_action('admin_menu', 'moj_plugin_dodaj_admin_meni');
function moj_plugin_dodaj_admin_meni() {
add_menu_page(
'Podešavanja Moj Plugin', // Naslov stranice
'Moj Plugin', // Tekst u meniju
'manage_options', // Capability potrebna za pristup
'moj-plugin-podesavanja', // Slug stranice
'moj_plugin_podesavanja_stranica', // Funkcija za renderovanje sadržaja
'dashicons-admin-generic', // Ikona (može biti URL ili dashicon)
30 // Pozicija u meniju
);
// Dodavanje podstranice
add_submenu_page(
'moj-plugin-podesavanja', // Parent slug
'Dodatna Podešavanja', // Naslov stranice
'Dodatna Podešavanja', // Tekst u meniju
'manage_options', // Capability
'moj-plugin-dodatna-podesavanja', // Slug
'moj_plugin_dodatna_podesavanja_stranica' // Callback funkcija
);
}
// Callback funkcija za glavnu stranicu podešavanja
function moj_plugin_podesavanja_stranica() {
// Proverite da li korisnik ima potrebne privilegije
if (!current_user_can('manage_options')) {
wp_die(__('Nemate dozvolu za pristup ovoj stranici.'));
}
// Prikazivanje HTML-a za stranicu podešavanja
echo '<div class="wrap">';
echo '<h1>' . esc_html(get_admin_page_title()) . '</h1>';
echo '<form method="post" action="options.php">';
// WordPress funkcije za renderovanje settings polja
settings_fields('moj_plugin_podesavanja');
do_settings_sections('moj-plugin-podesavanja');
submit_button('Sačuvaj promene');
echo '</form>';
echo '</div>';
}
Kreiranje formulara i čuvanje podesavanja
Za čuvanje podesavanja plugin-a, WordPress nudi Settings API koji obezbeđuje standardizovan način za čuvanje i validaciju podataka. Evo kako da ga implementirate:
// Registrovanje podesavanja, sekcija i polja
add_action('admin_init', 'moj_plugin_registruj_podesavanja');
function moj_plugin_registruj_podesavanja() {
// Registrovanje grupe podesavanja
register_setting(
'moj_plugin_podesavanja', // Option group
'moj_plugin_opcije', // Option name
'moj_plugin_validacija_podesavanja' // Validation callback
);
// Dodavanje sekcije
add_settings_section(
'moj_plugin_osnovna_sekcija', // ID sekcije
'Osnovna podešavanja', // Naslov
'moj_plugin_sekcija_opis', // Callback za opis
'moj-plugin-podesavanja' // Page slug
);
// Dodavanje polja
add_settings_field(
'moj_plugin_ime_polja', // ID polja
'Primer tekstualnog polja', // Naslov
'moj_plugin_polje_callback', // Callback za renderovanje polja
'moj-plugin-podesavanja', // Page slug
'moj_plugin_osnovna_sekcija' // Section ID
);
}
// Callback funkcija za validaciju
function moj_plugin_validacija_podesavanja($input) {
$validirani = array();
// Validacija i sanitizacija unosa
if (isset($input['moj_plugin_ime_polja'])) {
$validirani['moj_plugin_ime_polja'] = sanitize_text_field($input['moj_plugin_ime_polja']);
}
return $validirani;
}
// Callback za renderovanje polja
function moj_plugin_polje_callback() {
$options = get_option('moj_plugin_opcije');
$value = isset($options['moj_plugin_ime_polja']) ? $options['moj_plugin_ime_polja'] : '';
echo '<input type="text" id="moj_plugin_ime_polja" name="moj_plugin_opcije[moj_plugin_ime_polja]" value="' . esc_attr($value) . '" class="regular-text" />';
echo '<p class="description">Ovo je opis ovog polja koji pomaže korisnicima.</p>';
}
Prema istraživanju Kinsta, pravilno implementiran Settings API ne samo da obezbeđuje bolji korisnički interfejs, već i smanjuje broj bezbednosnih incidenata za 34% u poređenju sa ručnim čuvanjem opcija.
Kreiranje custom post type-ova i taksonomija
Šta su custom post type-ovi i kada ih koristiti
Custom post type-ovi (CPT) su specijalizovani tipovi sadržaja u WordPress-u koji se razlikuju od standardnih postova i stranica. Dok su standardni postovi idealni za blogove, a stranice za statičan sadržaj, CPT-ovi vam omogućavaju da kreirate potpuno nove vrste sadržaja kao što su proizvodi, portfolio stavke, događaji, testimoniali ili bilo šta drugo što zahteva drugačiju strukturu.
Evo primera kako registrovati custom post type za portfolio:
// Registrovanje custom post type-a za portfolio
add_action('init', 'moj_plugin_registruj_portfolio_cpt');
function moj_plugin_registruj_portfolio_cpt() {
$labels = array(
'name' => 'Portfolio',
'singular_name' => 'Portfolio stavka',
'menu_name' => 'Portfolio',
'add_new' => 'Dodaj novu',
'add_new_item' => 'Dodaj novu portfolio stavku',
'edit_item' => 'Izmeni portfolio stavku',
'new_item' => 'Nova portfolio stavku',
'view_item' => 'Pogledaj portfolio stavku',
'search_items' => 'Pretraži portfolio',
'not_found' => 'Nije pronađena nijedna portfolio stavka',
'not_found_in_trash' => 'Nema portfolio stavki u kanti za otpatke'
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_menu' => true,
'query_var' => true,
'rewrite' => array('slug' => 'portfolio'),
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => 20,
'menu_icon' => 'dashicons-portfolio',
'supports' => array('title', 'editor', 'thumbnail', 'excerpt', 'comments'),
'show_in_rest' => true, // Omogućava Gutenberg podršku
);
register_post_type('portfolio', $args);
}
Dodavanje custom taksonomija
Taksonomije su sistemi za klasifikaciju sadržaja. Dok WordPress dolazi sa kategorijama i tagovima (koje su taksonomije za postove), možete kreirati svoje taksonomije za custom post type-ove. Na primer, za portfolio možete dodati taksonomiju "Vrsta projekta" ili "Tehnologije".
„`php
// Registrovanje custom taksonomije za portfolio
add_action('init', 'moj_plugin_registruj_portfolio_taksonomiju');
function moj_plugin_registruj_portfolio_taksonomiju() {
$labels = array(
'name' => 'Vrste projekata',
'singular_name' => 'V

Autor teksta – Aleksandar Đekić
Aleksandar Đekić je osnivač i vlasnik sajta websajtizrada.rs, specijalizovanog za izradu profesionalnih WordPress sajtova i online prodavnica za mala i srednja preduzeća. U svetu web dizajna aktivan je više od sedam godina, tokom kojih je realizovao preko 350 sajtova za klijente iz Srbije, regiona i inostranstva.
Karijeru je započeo kao web dizajner, a vremenom se usmerio na kompletnu izradu WordPress projekata — od strategije i planiranja, preko dizajna, do tehničke optimizacije i SEO implementacije. Njegov pristup se zasniva na razumevanju poslovnih ciljeva klijenata, jednostavnoj komunikaciji i stvaranju funkcionalnih rešenja koja donose rezultate, a ne samo lep izgled.
Kao vlasnik sajta websajtizrada.rs, Aleksandar je razvio prepoznatljiv stil rada koji klijentima omogućava brzu i jasnu izradu, optimizovan kod, brze stranice, sigurnost i SEO strukturu koja se lako rangira na Google-u. Poznat je po tome što svaki projekat obrađuje detaljno i sistematično, bez šablona i generičkih pristupa.
Pored klijentskog rada, Aleksandar je i osnivač Live Škole WordPress-a, jedne od najpopularnijih edukacija za početnike i preduzetnike koji žele da nauče da samostalno prave profesionalne WordPress sajtove. Njegova predavanja i tekstovi kombinacija su praktičnog iskustva, jasnih koraka i saveta koji polaznicima pomažu da izbegnu najčešće greške.
Kroz blogove, tutorijale i edukativni sadržaj, Aleksandar redovno deli znanje o WordPress-u, SEO optimizaciji, izradi online prodavnica i digitalnom marketingu. Njegova misija je da moderni web postane dostupniji običnim ljudima i malim biznisima, bez komplikacija i tehničkog žargona.
Danas vodi više digitalnih projekata, sarađuje sa kompanijama iz različitih industrija i razvija sopstvene alate, procese i šablone koji ubrzavaju izradu sajtova. Klijenti ga najčešće opisuju kao stručnog, posvećenog i preciznog partnera na koga uvek mogu da računaju.