Što je Child Theme u WordPressu i kako ga kreirati

Što je Child Theme u WordPressu i kako ga kreirati: Kompletan vodič za početnike

Ako ste ikada pokušali prilagoditi WordPress temu i zatim izgubili sve promjene nakon ažuriranja, ovaj vodič je za vas. Child theme (dječja tema) je rješenje koje omogućava sigurne prilagodbe bez straha od gubitka rada.

U ovom detaljnom vodiču naučit ćete točno što je child theme, zašto ga trebate, i kako ga kreirati korak po korak – čak i ako nikada niste programirali.


Što je child theme u WordPressu?

Child theme je posebna WordPress tema koja nasljeđuje funkcionalnost, značajke i stil “roditeljske” teme (parent theme), ali vam omogućava da napravite prilagodbe bez izmjene originalne teme.

Jednostavnom analogijom: Child theme je poput stvaranja kopije knjige u koju možete pisati bilješke i izmjene, dok originalna knjiga ostaje netaknuta.

Kako child theme funkcionira?

WordPress ima princip “kaskadne nasljednosti” gdje child theme:

  1. Preuzima sve iz parent theme – dizajn, funkcionalnost, postavke
  2. Dodaje ili mijenja samo ono što želite – vlastiti CSS, funkcije, template datoteke
  3. Omogućava sigurna ažuriranja – parent theme se može ažurirati bez gubitka prilagodbi

Kada WordPress učitava stranicu s aktivnim child theme-om:

  • Prvo provjerava postoji li datoteka u child theme direktoriju
  • Ako postoji, koristi tu verziju
  • Ako ne postoji, koristi verziju iz parent theme-a

Zašto vam je potreban child theme?

1. Zaštita prilagodbi pri ažuriranjima

Najvažniji razlog za korištenje child theme-a je zaštita vašeg rada.

Problem bez child theme-a:

  • Izmijenite style.css ili functions.php u temi
  • Tema dobije ažuriranje sigurnosti ili novih značajki
  • Kliknete “Update”
  • Sve vaše prilagodbe su izbrisane

Rješenje s child theme-om:

  • Sve prilagodbe su u odvojenom direktoriju
  • Parent tema se može sigurno ažurirati
  • Vaše izmjene ostaju netaknute

2. Organizacija i čistoća koda

Child theme omogućava jasno razdvajanje:

  • Parent theme = osnovna funkcionalnost
  • Child theme = vaše specifične prilagodbe

Ovo olakšava debugiranje, održavanje i razumijevanje što ste točno promijenili.

3. Lakše testiranje

Možete eksperimentirati s izmjenama bez straha:

  • Probajte novi CSS
  • Testirajte custom funkcionalnost
  • Ako nešto pođe po zlu, jednostavno vratite child theme na prijašnju verziju

4. Profesionalni development workflow

Za developere i agencije, child theme-ovi omogućavaju:

  • Verzioniranje izmjena (Git)
  • Timski rad na projektu
  • Prebacivanje između staging i production okruženja
  • Dokumentiranje specifičnih izmjena za klijenta

5. Produljenje životnog vijeka teme

Premium teme često dobivaju značajna ažuriranja:

  • Nove značajke
  • Poboljšanja performansi
  • Sigurnosne zakrpe
  • Kompatibilnost s novim verzijama WordPressа

S child theme-om možete iskoristiti sve te benefite bez gubitka prilagodbi.

Kada koristiti child theme?

UVIJEK koristite child theme ako:

✅ Mijenjate CSS stilove teme
✅ Dodajete custom PHP funkcije
✅ Prilagođavate template datoteke (header.php, footer.php, single.php…)
✅ Radite na klijentskom projektu
✅ Planirate dugoročno održavanje web stranice
✅ Koristite popularnu temu koja se redovito ažurira

NE trebate child theme ako:

❌ Koristite Customizer (Theme Customizer izmjene se čuvaju u bazi)
❌ Sve radite kroz page buildere (Elementor, Divi, Beaver Builder)
❌ Koristite samo pluginove za prilagodbe
❌ Tema ima ugrađene opcije za sve što trebate

Napomena: Čak i ako trenutno ne mijenjate kod, preporučujem kreiranje child theme-a “za svaki slučaj” – nikad ne znate kada će vam zatrebati mala CSS izmjena.

Struktura child theme direktorija

Prije nego krenemo s kreiranjem, razumijmo osnovnu strukturu:

wp-content/themes/
├── parent-theme/          (roditeljska tema)
│   ├── style.css
│   ├── functions.php
│   ├── header.php
│   └── ...
└── parent-theme-child/    (vaš child theme)
    ├── style.css          (obavezno)
    ├── functions.php      (preporučeno)
    ├── screenshot.png     (opciono)
    └── template files     (po potrebi)

Minimalni zahtjevi:

  • Direktorij s jedinstvenim nazivom
  • style.css s posebnim header komentarom

Preporučena struktura:

  • style.css – glavni CSS file
  • functions.php – custom funkcionalnost
  • screenshot.png – slika koja se prikazuje u admin panelu (880x660px)

Kako kreirati child theme: 3 metode

Metoda 1: Manualno kreiranje (preporučeno za učenje)

Ova metoda vam daje potpunu kontrolu i razumijevanje kako child theme funkcionira.

Korak 1: Kreiranje direktorija

Spojite se na vaš web server putem FTP-a (FileZilla, Cyberduck) ili koristite File Manager u cPanelu.

Navigirajte do:

/wp-content/themes/

Kreirajte novi folder. Ime treba biti:

  • U lowercase slovima
  • Bez razmaka (koristite crtice)
  • Opisno i jedinstveno

Primjeri dobrih naziva:

  • blocksy-child
  • astra-child
  • twentytwentyfour-child
  • generatepress-moj-projekt

Izbjegavajte:

  • child (prejednostavno)
  • My Theme Child (razmaci, velika slova)
  • Naziv koji već postoji

Korak 2: Kreiranje style.css

U novom direktoriju kreirajte datoteku style.css s ovim sadržajem:

/*
Theme Name:   Blocksy Child
Theme URI:    https://masterymesh.com
Description:  Child tema za Blocksy
Author:       MasteryMesh
Author URI:   https://masterymesh.com
Template:     blocksy
Version:      1.0.0
License:      GNU General Public License v2 or later
License URI:  http://www.gnu.org/licenses/gpl-2.0.html
Text Domain:  blocksy-child
*/

/* ============================================
   Ovdje dodajte vaše custom CSS stilove
   ============================================ */

/* Primjer: Promjena boje naslova */
h1 {
    color: #2c3e50;
}

Ključni parametri objašnjeni:

  • Theme Name – Ime koje će se prikazivati u WordPress admin panelu
  • Template – Naziv direktorija parent theme-a (MORA biti točan!)
  • Description – Kratak opis teme
  • Version – Verzija za praćenje izmjena
  • Text Domain – Za prijevode (trebate samo ako planirate prevođenje)

KRITIČNO: Template: vrijednost MORA točno odgovarati nazivu direktorija parent theme-a. Ako se ne poklapa, child theme neće raditi.

Korak 3: Kreiranje functions.php

Kreirajte functions.php u istom direktoriju:

<strong><?php</strong>
/**
 * Blocksy Child Theme Functions
 * 
 * @package Blocksy Child
 */

// Izlazak ako je direktno pristupljeno
if ( ! defined( 'ABSPATH' ) ) {
    exit;
}

/**
 * Učitavanje parent i child theme stilova
 */
function blocksy_child_enqueue_styles() {
    
    // Parent theme CSS
    wp_enqueue_style( 
        'blocksy-parent-style', 
        get_template_directory_uri() . '/style.css',
        array(),
        wp_get_theme()->parent()->get('Version')
    );
    
    // Child theme CSS
    wp_enqueue_style( 
        'blocksy-child-style',
        get_stylesheet_directory_uri() . '/style.css',
        array( 'blocksy-parent-style' ),
        wp_get_theme()->get('Version')
    );
}
add_action( 'wp_enqueue_scripts', 'blocksy_child_enqueue_styles' );

/**
 * Ovdje dodajte svoje custom funkcije
 */

// Primjer: Custom funkcija za dodavanje copyright godine
function get_copyright_year() {
    return date('Y');
}

Važna napomena o functions.php:

Za razliku od većine template datoteka, functions.php iz child theme-a se ne zamjenjuje već se dodaje uz parent theme functions.php. Oba se izvršavaju (prvo child, zatim parent).

Korak 4: Dodavanje screenshot slike (opciono)

Za profesionalan izgled u admin panelu, dodajte screenshot.png:

  • Dimenzije: 880×660 piksela (preporučeno) ili 1200x900px
  • Format: PNG ili JPG
  • Sadržaj: Logo, primjer dizajna, ili jednostavno ime teme

Možete kreirati u Canvi, Photoshopu, ili bilo kojem grafičkom alatu.

Korak 5: Aktivacija child theme-a

  1. Idite u WordPress Admin → IzgledTeme
  2. Pronaći ćete svoju novu child temu
  3. Kliknite Activate ili Aktiviraj

VAŽNO: Nikada nemojte aktivirati parent i child theme istovremeno. Uvijek aktivirajte samo child theme.

Metoda 2: Korištenje plugina (najbrže za početnike)

Ako vam manualno kreiranje zvuči zastrašujuće, možete koristiti plugin.

Preporučeni plugin: Child Theme Configurator

Instalacija:

  1. WordPress AdminDodaciDodaj novi
  2. Pretražite “Child Theme Configurator
  3. Instalirajte i aktivirajte

Korištenje:

  1. Idite na AlatiChild Themes
  2. Odaberite CREATE a new Child Theme
  3. Parent Theme: Odaberite svoju trenutnu temu
  4. Analysis: Kliknite “Analyze” i pričekajte
  5. Configure Child Theme:
    • Unesite Child Theme Name
    • Opcionalno: Author, Description
  6. Copy Menus, Widgets and Customizer Settings: Označite ako želite zadržati postavke
  7. Create New Child Theme

Plugin automatski:

  • Kreira direktorij
  • Generira style.css i functions.php
  • Postavlja ispravne parametre
  • Nudi opciju za kopiranje postavki

Prednosti: ✅ Brzo i jednostavno
✅ Automatska konfiguracija
✅ Grafičko sučelje
✅ Podrška za custom templateove

Nedostaci: ❌ Manja kontrola nad procesom
❌ Dodatni plugin koji možete kasnije deaktivirati

Metoda 3: WP-CLI (za napredne korisnike)

Ako imate pristup command line-u na serveru:

# Navigirajte do themes direktorija
cd /path/to/wp-content/themes/

# Kreirajte child theme direktorij
mkdir blocksy-child
cd blocksy-child

# Kreirajte style.css
cat > style.css << 'EOF'
/*
Theme Name:   Blocksy Child
Template:     blocksy
Version:      1.0.0
*/
EOF

# Kreirajte functions.php
cat > functions.php << 'EOF'
<?php
function blocksy_child_enqueue_styles() {
    wp_enqueue_style('parent-style', get_template_directory_uri() . '/style.css');
    wp_enqueue_style('child-style', get_stylesheet_directory_uri() . '/style.css', array('parent-style'));
}
add_action('wp_enqueue_scripts', 'blocksy_child_enqueue_styles');
EOF

# Aktivirajte child theme
wp theme activate blocksy-child

Prilagodba child theme-a: Praktični primjeri

Sada kada imate child theme, što možete s njim raditi?

1. Dodavanje custom CSS-a

Najčešća upotreba child theme-a je dodavanje vlastitih stilova.

U style.css dodajte:

/* Promjena font familije */
body {
    font-family: 'Roboto', sans-serif;
}

/* Stiliziranje gumbâ */
.button, .btn {
    background-color: #3498db;
    color: #ffffff;
    padding: 12px 24px;
    border-radius: 5px;
    transition: all 0.3s ease;
}

.button:hover, .btn:hover {
    background-color: #2980b9;
    transform: translateY(-2px);
}

/* Responzivni header */
@media (max-width: 768px) {
    .site-header {
        padding: 10px 15px;
    }
}

/* Custom footer stilovi */
.site-footer {
    background-color: #2c3e50;
    color: #ecf0f1;
    padding: 40px 0;
}

Savjet: Koristite browser Developer Tools (F12) da identifikujete CSS klase koje želite mijenjati.

2. Dodavanje custom funkcija

U functions.php možete dodati razne funkcionalnosti.

Primjer 1: Dodavanje custom veličine slike

// Registracija custom image size
function custom_image_sizes() {
    add_image_size( 'portfolio-thumb', 400, 300, true );
    add_image_size( 'hero-image', 1920, 800, true );
}
add_action( 'after_setup_theme', 'custom_image_sizes' );

Primjer 2: Uklanjanje WordPress verzije iz head-a (sigurnost)

// Ukloni WordPress verziju
remove_action('wp_head', 'wp_generator');

Primjer 3: Custom excerpt length

// Promijeni duljinu excerpt-a
function custom_excerpt_length( $length ) {
    return 30; // broj riječi
}
add_filter( 'excerpt_length', 'custom_excerpt_length' );

Primjer 4: Dodavanje custom widget područja

// Registracija sidebar-a
function custom_widget_areas() {
    register_sidebar( array(
        'name'          => 'Custom Sidebar',
        'id'            => 'custom-sidebar',
        'description'   => 'Custom widget area',
        'before_widget' => '<div class="widget %2$s">',
        'after_widget'  => '</div>',
        'before_title'  => '<h3 class="widget-title">',
        'after_title'   => '</h3>',
    ) );
}
add_action( 'widgets_init', 'custom_widget_areas' );

3. Prilagodba template datoteka

Ako trebate izmijeniti strukturu stranice, kopirajte template iz parent theme-a.

Postupak:

  1. Identificirajte template koji želite promijeniti (npr. header.php, footer.php, single.php)
  2. Kopirajte ga iz parent theme direktorija
  3. Zalijepite u child theme direktorij
  4. Izmijenite kopiju

Primjer: Prilagodba footer.php

<strong><?php</strong>
/**
 * Custom Footer Template
 */
<strong>?></strong>
<footer class="site-footer">
    <div class="container">
        <div class="footer-content">
            <div class="footer-column">
                <h4>O nama</h4>
                <p>Kratki opis vašeg biznisa.</p>
            </div>
            
            <div class="footer-column">
                <h4>Kontakt</h4>
                <p>Email: [email protected]</p>
                <p>Tel: +385 1 234 5678</p>
            </div>
            
            <div class="footer-column">
                <strong><?php</strong>
                wp_nav_menu( array(
                    'theme_location' => 'footer-menu',
                    'menu_class'     => 'footer-menu',
                ) );
                <strong>?></strong>
            </div>
        </div>
        
        <div class="footer-bottom">
            <p>&copy; <strong><?php</strong> echo date('Y'); <strong>?></strong> <strong><?php</strong> bloginfo('name'); <strong>?></strong>. Sva prava pridržana.</p>
        </div>
    </div>
</footer>

<strong><?php</strong> wp_footer(); <strong>?></strong>
</body>
</html>

VAŽNO: Ne kopirajte template datoteke “za svaki slučaj”. Kopirajte samo one koje aktivno mijenjate, jer:

  • Smanjuje mogućnost grešaka
  • Olakšava održavanje
  • Parent theme može dodati nove značajke u template-e

4. Dodavanje custom post type-a

// Registracija Portfolio CPT
function create_portfolio_post_type() {
    register_post_type( 'portfolio',
        array(
            'labels' => array(
                'name' => 'Portfolio',
                'singular_name' => 'Portfolio Item'
            ),
            'public' => true,
            'has_archive' => true,
            'supports' => array( 'title', 'editor', 'thumbnail' ),
            'menu_icon' => 'dashicons-portfolio',
        )
    );
}
add_action( 'init', 'create_portfolio_post_type' );

Česte greške i kako ih izbjeći

Greška 1: Krivi Template parametar

Problem:

css

Template: Blocksy  /* Krivo - velika slova */

Rješenje:

css

Template: blocksy  /* Točno - naziv direktorija */

Provjerite točan naziv direktorija u /wp-content/themes/.

Greška 2: functions.php bez otvarajuće PHP oznake

Problem:

php

function my_function() {  // Krivo - fali <strong><?php</strong>
    // kod
}

Rješenje:

php

<strong><?php</strong>  // Obavezno na početku
function my_function() {
    // kod
}

Greška 3: Zatvarajuća PHP oznaka na kraju

Problem:

php

<strong><?php</strong>
function my_function() {
    // kod
}
<strong>?></strong>  // Loša praksa

Rješenje:

php

<strong><?php</strong>
function my_function() {
    // kod
}
// Bez zatvarajuće oznake na kraju

WordPress najbolje prakse kažu da ne trebate ?> na kraju functions.php.

Greška 4: Duplicirane funkcije

Problem:

php

// Parent theme već ima ovu funkciju
function custom_logo() {
    // Fatal error: Cannot redeclare function
}

Rješenje:

php

// Provjerite postoji li funkcija
if ( ! function_exists( 'custom_logo' ) ) {
    function custom_logo() {
        // vaš kod
    }
}

Greška 5: Neispravno učitavanje stilova

Stari (zastarjeli) način:

php

// NE koristite @import
@import url("../parent-theme/style.css");

Ispravno:

php

// Koristite wp_enqueue_style
wp_enqueue_style('parent-style', get_template_directory_uri() . '/style.css');

Debugging child theme problema

Ako child theme ne radi kako treba:

1. Provjerite aktivaciju

  • Admin → Izgled → Teme
  • Je li child theme aktiviran (ne parent)?

2. Provjerite Template parametar

css

Template: blocksy  /* Mora biti točan naziv direktorija */

3. Omogućite WP_DEBUG

U wp-config.php dodajte:

php

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );

Greške će se zapisivati u /wp-content/debug.log.

4. Provjerite file permissions

bash

# Ispravne permisije
find /path/to/child-theme -type d -exec chmod 755 {} \;
find /path/to/child-theme -type f -exec chmod 644 {} \;

5. Onemogućite druge pluginove

Konflikt s pluginovima može uzrokovati probleme. Privremeno deaktivirajte sve pluginove i testirajte.

6. Provjerite PHP greške

Koristite browser konzolu (F12) i provjerite postoje li JavaScript greške koje mogu ukazivati na PHP probleme.

Napredne tehnike

Učitavanje dodatnih CSS datoteka

php

function enqueue_custom_styles() {
    // Custom fonts
    wp_enqueue_style( 'google-fonts', 'https://fonts.googleapis.com/css2?family=Roboto:wght@400;700&display=swap', array(), null );
    
    // Custom CSS file
    wp_enqueue_style( 'custom-styles', get_stylesheet_directory_uri() . '/css/custom.css', array(), '1.0.0' );
}
add_action( 'wp_enqueue_scripts', 'enqueue_custom_styles' );

Učitavanje JavaScript datoteka

php

function enqueue_custom_scripts() {
    wp_enqueue_script( 'custom-js', get_stylesheet_directory_uri() . '/js/custom.js', array('jquery'), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'enqueue_custom_scripts' );

Uvjetno učitavanje resursa

php

function conditional_scripts() {
    // Učitaj samo na home page
    if ( is_front_page() ) {
        wp_enqueue_style( 'homepage-style', get_stylesheet_directory_uri() . '/css/homepage.css' );
    }
    
    // Učitaj samo na single post
    if ( is_single() ) {
        wp_enqueue_script( 'single-post-js', get_stylesheet_directory_uri() . '/js/single-post.js', array(), '1.0', true );
    }
}
add_action( 'wp_enqueue_scripts', 'conditional_scripts' );

Override parent theme funkcija

php

// Parent theme ima ovu funkciju
function parent_theme_function() {
    return 'Parent value';
}

// U child theme-u možete override-ati ako parent koristi function_exists
if ( ! function_exists( 'parent_theme_function' ) ) {
    function parent_theme_function() {
        return 'Child value';
    }
}

Best practices za child theme development

1. Organizacija datoteka

child-theme/
├── style.css
├── functions.php
├── screenshot.png
├── css/
│   ├── custom.css
│   └── responsive.css
├── js/
│   ├── custom.js
│   └── navigation.js
├── images/
│   └── logo.png
└── templates/
    ├── header.php
    └── footer.php

2. Komentiranje koda

php

/**
 * Custom funkcija za dodavanje schema markup-a
 * 
 * @param string $type Schema tip
 * @return void
 */
function add_schema_markup( $type = 'Organization' ) {
    // Implementacija
}

3. Verzioniranje

Koristite Git za praćenje izmjena:

bash

cd /path/to/child-theme
git init
git add .
git commit -m "Initial child theme setup"

4. Prefix za funkcije

php

// Koristite prefix da izbjegnete konflikte
function mm_custom_function() {  // mm = MasteryMesh prefix
    // kod
}

5. Dokumentacija

Kreirajte README.md u child theme direktoriju:

markdown

# Blocksy Child Theme

## Izmjene
- Custom header layout
- Modified footer widgets
- Additional CSS for mobile responsiveness

## Custom funkcije
- `mm_custom_breadcrumbs()` - Custom breadcrumb navigation
- `mm_related_posts()` - Related posts section

## Verzije
- 1.0.0 - Initial release
- 1.1.0 - Added custom post types

Child theme za popularne teme

Astra Theme

css

/*
Theme Name:   Astra Child
Template:     astra
Version:      1.0.0
*/

GeneratePress

css

/*
Theme Name:   GeneratePress Child
Template:     generatepress
Version:      1.0.0
*/

OceanWP

css

/*
Theme Name:   OceanWP Child
Template:     oceanwp
Version:      1.0.0
*/

Kadence

css

/*
Theme Name:   Kadence Child
Template:     kadence
Version:      1.0.0
*/

Savjet: Uvijek provjerite dokumentaciju teme jer neke premium teme imaju specifične zahtjeve za child theme-ove.

Migracija s parent na child theme

Ako već imate aktivnu stranicu s modificiranom parent temom:

Korak 1: Backup

Napravite kompletnu sigurnosnu kopiju:

  • Baza podataka
  • Svi datoteke
  • Posebno /wp-content/themes/parent-theme/

Korak 2: Kreirajte child theme

Slijedite bilo koju od gore navedenih metoda.

Korak 3: Kopirajte prilagodbe

  • CSS izmjene: Kopirajte iz parent style.css u child style.css
  • PHP izmjene: Kopirajte modificirane template-e u child direktorij
  • functions.php: Pažljivo kopirajte samo custom funkcije

Korak 4: Testirajte na staging okruženju

NE aktivirajte direktno na produkciji! Testirajte prvo:

  • Kreirajte staging kopiju stranice
  • Aktivirajte child theme
  • Provjerite sve stranice
  • Testirajte funkcionalnost

Korak 5: Aktivacija na produkciji

Kada je sve testirano:

  • Aktivirajte child theme
  • Odmah provjerite homepage
  • Pregledajte key stranice
  • Provjerite admin funkcionalnost

Troubleshooting checklist

☐ Je li Template: parametar točan?
☐ Postoji li parent tema u /themes/?
☐ Je li child theme aktiviran?
☐ Je li functions.php ispravno formatiran?
☐ Ima li PHP grešaka? (provjeri debug.log)
☐ Jesu li file permissions ispravne?
☐ Konflikti s pluginovima?
☐ Cache clearing (browser + server + plugin)
☐ Je li .css učitan? (provjeri Page Source)
☐ Postoji li CSS specifičnost problem?

Zaključak

Child theme je jednostavan ali moćan alat koji štiti vaš rad i omogućava profesionalan WordPress development workflow. Bez obzira jeste li početnik koji želi promijeniti boju gumba ili developer koji gradi kompleksnu web aplikaciju, child theme je best practice koja se isplati.

Ključne prednosti:

  • ✅ Zaštita prilagodbi pri ažuriranjima
  • ✅ Čist i organiziran kod
  • ✅ Mogućnost eksperimentiranja bez straha
  • ✅ Profesionalan development workflow
  • ✅ Verzioniranje i timski rad

Vaši sljedeći koraci:

  1. Kreirajte svoj prvi child theme koristeći gornje upute
  2. Dodajte minimalne CSS izmjene za testiranje
  3. Dokumentirajte sve prilagodbe
  4. Postavite Git verzioniranje
  5. Educirajte se dalje o WordPress templating sistemu

Child theme nije luksuz – to je nužnost za svakoga tko ozbiljno radi s WordPressom. Investirajte 15 minuta u kreiranje child theme-a danas, i uštedjeti ćete sate frustracije u budućnosti.


Trebate pomoć s WordPress developmentom? MasteryMesh nudi usluge kreiranja custom child theme-ova, migracije postojećih stranica, i WordPress optimizacije. Kontaktirajte nas za besplatnu konzultaciju o vašem projektu.

Povezani članci