Custom PHP kod: Kako proširiti funkcionalnost Elementora
U svetu WordPress-a, Elementor je postao neizostavan alat za dizajniranje sajtova. Međutim, čak i sa svim svojim mogućnostima, ponekad vam je potrebna specifična funkcionalnost koju standardni widgeti ne pružaju. Tu na scenu stupa custom PHP kod – moćan alat koji vam omogućava da proširite Elementor prema vašim jedinstvenim potrebama. U ovom sveobuhvatnom vodiču, istražićemo kako možete iskoristiti PHP programiranje da transformišete svoj Elementor doživljaj i stvorite potpuno personalizovana rešenja.
Zašto koristiti custom PHP kod sa Elementorom?
Elementor je fantastičan vizuelni editor, ali njegova prava moć leži u ekstenzibilnosti. Dok Elementor Pro nudi dodatne widgete i funkcionalnosti, ponekad vam je potrebno nešto što je specifično za vaš projekat. Prema istraživanju W3Techs, WordPress pokreće preko 43% svih veb sajtova, a fleksibilnost poput ove je jedan od ključnih razloga. Custom PHP kod vam omogućava da:
- Kreirate potpuno nove widgete prilagođene vašim potrebama
- Modifikujete postojeće funkcionalnosti
- Integrišete spoljne API-je i servise
- Automatizujete kompleksne procese
- Implementirate poslovnu logiku specifičnu za vašu nišu
Kada pravite sajt u WordPressu, sposobnost da ga prilagodite na ovaj način može biti razlika između prosečnog i izvanrednog rezultata.
Osnove: Kako bezbedno dodati PHP kod u WordPress
Pre nego što zaronimo u Elementor-specifične tehnike, važno je razumeti kako bezbedno implementirati custom PHP kod u WordPress. Postoje tri glavna pristupa:
1. Korišćenje functions.php teme
Najčešći način je dodavanje koda u functions.php datoteku vaše teme. Međutim, ovaj pristup ima nedostatak – kod će biti izgubljen kada ažurirate temu.
// Primer osnovnog koda u functions.php
add_action('wp_enqueue_scripts', 'moja_custom_skripta');
function moja_custom_skripta() {
wp_enqueue_style('custom-style', get_stylesheet_directory_uri() . '/css/custom.css');
}
2. Korišćenje child teme
Child tema je najbolja praksa jer vam omogućava da zadržite modifikacije i nakon ažuriranja parent teme. Ovo je posebno važno kada radite sa Elementor temama koje se često ažuriraju.
3. Plugin za custom kod
Pluginovi poput "Code Snippets" omogućavaju vam da dodajete PHP kod bez modifikovanja teme. Ovo je najbezbedniji pristup jer izoluje vaš kod i čini ga prenosivim između tema.
Kreiranje custom Elementor widgeta sa PHP
Jedna od najmoćnijih primena custom PHP koda je kreiranje potpuno novih Elementor widgeta. Ovo vam omogućava da proširite biblioteku widgeta sa funkcionalnostima koje su specifične za vaš sajt.
Struktura custom widgeta
Svaki Elementor widget se sastoji iz nekoliko ključnih delova:
class Moj_Custom_Widget extends ElementorWidget_Base {
public function get_name() {
return 'moj_custom_widget';
}
public function get_title() {
return __('Moj Custom Widget', 'text-domain');
}
public function get_icon() {
return 'eicon-code';
}
public function get_categories() {
return ['basic'];
}
protected function _register_controls() {
// Kontrole za widget
}
protected function render() {
// Renderovanje widgeta na frontendu
}
}
Praktičan primer: Custom galerija widget
Recimo da želite da kreirate specijalizovanu galeriju widget za umetnički portfolio. Standardni Elementor galerija widget možda nema specifične opcije koje vam trebaju.
class Umetnicka_Galerija_Widget extends ElementorWidget_Base {
public function get_name() {
return 'umetnicka_galerija';
}
public function get_title() {
return __('Umetnička Galerija', 'text-domain');
}
protected function _register_controls() {
$this->start_controls_section(
'content_section',
[
'label' => __('Sadržaj', 'text-domain'),
'tab' => ElementorControls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'galerija_slike',
[
'label' => __('Izaberite slike', 'text-domain'),
'type' => ElementorControls_Manager::GALLERY,
'default' => [],
]
);
$this->add_control(
'prikaz_opisa',
[
'label' => __('Prikaži opis', 'text-domain'),
'type' => ElementorControls_Manager::SWITCHER,
'label_on' => __('Da', 'text-domain'),
'label_off' => __('Ne', 'text-domain'),
'return_value' => 'yes',
'default' => 'yes',
]
);
$this->end_controls_section();
}
protected function render() {
$settings = $this->get_settings_for_display();
if ($settings['galerija_slike']) {
echo '<div class="umetnicka-galerija">';
foreach ($settings['galerija_slike'] as $slika) {
echo '<div class="galerija-item">';
echo '<img src="' . esc_url($slika['url']) . '" alt="' . esc_attr($slika['alt']) . '">';
if ($settings['prikaz_opisa'] === 'yes' && !empty($slika['caption'])) {
echo '<div class="slika-opis">' . esc_html($slika['caption']) . '</div>';
}
echo '</div>';
}
echo '</div>';
}
}
}
Ovaj custom widget možete dalje proširiti sa dodatnim kontrolama za stilizaciju, animacije, ili specijalne efekte koji odgovaraju vašem umetničkom portfoliju. Ako želite da naučite više o optimizaciji galerija, pogledajte naš vodič o optimizaciji galerije sa JetElements.
Proširenje postojećih Elementor funkcionalnosti
Ponekad vam ne treba potpuno nov widget, već želite da dodate dodatne opcije postojećim Elementor komponentama. Ovo možete postići korišćenjem Elementor filtera i akcija.
Dodavanje custom kontrola postojećim widgetima
// Dodavanje custom kontrole u sve widgete sa slikama
add_action('elementor/element/image/section_image/before_section_end', function($element, $args) {
$element->add_control(
'custom_hover_effect',
[
'label' => __('Custom Hover Efekat', 'text-domain'),
'type' => ElementorControls_Manager::SELECT,
'options' => [
'none' => __('Nema', 'text-domain'),
'zoom' => __('Zumiranje', 'text-domain'),
'grayscale' => __('Sivi filter', 'text-domain'),
'sepia' => __('Sepia', 'text-domain'),
],
'default' => 'none',
'prefix_class' => 'hover-effect-',
]
);
}, 10, 2);
Modifikovanje izlaza widgeta
// Modifikovanje HTML izlaza za heading widget
add_filter('elementor/widget/render_content', function($content, $widget) {
if ($widget->get_name() === 'heading') {
// Dodajemo custom klasu svim heading widgetima
$content = str_replace('elementor-heading-title', 'elementor-heading-title custom-heading', $content);
}
return $content;
}, 10, 2);
Integracija sa WooCommerce kroz custom PHP kod
Za one koji koriste WooCommerce za online prodavnicu, custom PHP kod može značajno proširiti funkcionalnosti kada se koristi sa Elementorom. Na primer, možete kreirati custom widget koji prikazuje proizvode na specifičan način.
class Featured_Products_Slider extends ElementorWidget_Base {
protected function _register_controls() {
$this->start_controls_section(
'content_section',
[
'label' => __('Postavke', 'text-domain'),
'tab' => ElementorControls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'broj_proizvoda',
[
'label' => __('Broj proizvoda', 'text-domain'),
'type' => ElementorControls_Manager::NUMBER,
'min' => 1,
'max' => 12,
'default' => 4,
]
);
$this->add_control(
'kategorija',
[
'label' => __('Kategorija', 'text-domain'),
'type' => ElementorControls_Manager::SELECT2,
'options' => $this->get_product_categories(),
'multiple' => true,
]
);
$this->end_controls_section();
}
private function get_product_categories() {
$categories = get_terms([
'taxonomy' => 'product_cat',
'hide_empty' => false,
]);
$options = [];
if (!empty($categories) && !is_wp_error($categories)) {
foreach ($categories as $category) {
$options[$category->term_id] = $category->name;
}
}
return $options;
}
protected function render() {
$settings = $this->get_settings_for_display();
$args = [
'post_type' => 'product',
'posts_per_page' => $settings['broj_proizvoda'],
'post_status' => 'publish',
];
if (!empty($settings['kategorija'])) {
$args['tax_query'] = [
[
'taxonomy' => 'product_cat',
'field' => 'term_id',
'terms' => $settings['kategorija'],
]
];
}
$products = new WP_Query($args);
if ($products->have_posts()) {
echo '<div class="featured-products-slider">';
while ($products->have_posts()) {
$products->the_post();
global $product;
echo '<div class="product-slide">';
echo '<a href="' . get_permalink() . '">';
echo get_the_post_thumbnail(get_the_ID(), 'medium');
echo '<h3>' . get_the_title() . '</h3>';
echo '<span class="price">' . $product->get_price_html() . '</span>';
echo '</a>';
echo '</div>';
}
echo '</div>';
wp_reset_postdata();
}
}
}
Ovo je samo početak onoga što možete postići integracijom WooCommerce i Elementora putem custom PHP koda. Za detaljnije uputstvo, pogledajte naš WooCommerce tutorijal za online prodavnicu.
Optimizacija performansi custom PHP koda
Kada dodajete custom PHP kod, važno je da optimizujete performanse kako ne biste usporili vaš sajt. Prema istraživanju Google-a, sajtovi koji se učitavaju za 1 sekundu imaju do 3 puta veću konverziju od onih koji se učitavaju za 5 sekundi.
Najbolje prakse za optimizaciju:
- Kesiranje rezultata: Za kompleksne upite ili proračune, implementirajte kesiranje.
function get_complex_data() {
$cache_key = 'complex_data_cache';
$data = get_transient($cache_key);
if (false === $data) {
// Kompleksni proračun ili upit
$data = expensive_database_query();
// Sačuvaj u kesu na 1 sat
set_transient($cache_key, $data, HOUR_IN_SECONDS);
}
return $data;
}
-
Minimiziranje upita ka bazi: Kombinujte upite gde god je to moguće.
-
Asinhrono učitavanje: Za teške operacije, razmotrite asinhrono izvršavanje.
-
Regularno čišćenje: Uklonite nepotreban kod i optimizujte algoritme.
Za više saveta o optimizaciji performansi, posetite naš vodič o optimizaciji brzine WordPress sajta.
Bezbednosna razmatranja pri pisanju custom PHP koda
Bezbednost je kritična kada radite sa custom PHP kodom. Uvek pratite ove najbolje prakse:
1. Validacija i sanitizacija korisničkog unosa
// NE RADITE OVAKO
$user_input = $_GET['parameter'];
echo $user_input;
// RADITE OVAKO
$user_input = sanitize_text_field($_GET['parameter']);
echo esc_html($user_input);
2. Nonce verifikacija za forme i AJAX zahteve
// U formi
wp_nonce_field('moja_custom_akcija', 'moj_nonce_field');
// Pri obradi
if (!isset($_POST['moj_nonce_field']) ||
!wp_verify_nonce($_POST['moj_nonce_field'], 'moja_custom_akcija')) {
die('Bezbednosna greška!');
}
3. Ograničavanje pristupa po ulogama
if (!current_user_can('manage_options')) {
wp_die('Nemate dozvolu za ovu akciju.');
}
Debugging i testiranje custom PHP koda
Kada razvijate custom PHP kod za Elementor, važno je imati solidan proces debugovanja:
1. Omogućite WordPress debug režim
// U wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
2. Koristite WordPress debug bar plugin
Debug Bar plugin pruža detaljne informacije o upitima, akcijama i filterima.
3. Logovanje custom poruka
function log_custom_message($message) {
if (true === WP_DEBUG) {
if (is_array($message) || is_object($message)) {
error_log(print_r($message, true));
} else {
error_log($message);
}
}
}
Integracija sa spoljnim API-jima
Custom PHP kod vam omogućava da integrišete Elementor sa spoljnim servisima. Evo primera integracije sa vremenskom API uslugom:
„`php
class Weather_Widget extends ElementorWidget_Base {
protected function _register_controls() {
$this->start_controls_section(
'content_section',
[
'label' => __('Postavke vremena', 'text-domain'),
'tab' => ElementorControls_Manager::TAB_CONTENT,
]
);
$this->add_control(
'grad',
[
'label' => __('Grad', 'text-domain'),
'type' => ElementorControls_Manager::TEXT,
'default' => 'Beograd',
]
);
$this->add_control(
'api_kljuc',
[
'label' => __('API ključ', 'text-domain'),
'type' => ElementorControls_Manager::TEXT,
'description' => __('Unes

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.