WordPress child teme

WordPress child teme

U ovom članku baviću se WordPress child temama. Objasniću šta su child teme, zbog čega su praktične, kako ih napraviti, uz nekoliko konkretnih primera za neke popularne teme.

Sadržaj:

  1. Šta je to WordPress child tema?
  2. Kako napraviti child temu za WordPress
  3. Primeri WordPress child tema
    3.1. Storefront child tema
    3.2. Astra child tema
    3.3. GeneratePress child tema
  4. Izmene izgleda pomoću style.css child teme
  5. Izmene izgleda i funkcionalnosti pomoću functions.php child teme
  6. Čemu sve to?
  7. Zaključak


1. Šta je to WordPress child tema?

Prvo ću ukratko objasniti šta je WordPress tema:

Tema je skup CSS i PHP koda (i fajlova) koji određuju kako će vaš sajt izgledati. Gde će se nalazidi vidžeti, koji fontovi će biti prikazani i kako, koja će biti boja pozadine itd. Većina tema dozvoljava prilagođavanje izgleda – neke u manjoj, neke u većoj meri.

Ipak, nekada je potrebno dobiti neki izgled, ili čak funkcionalnost, koju autor teme nije predvideo. Tu na scenu stupaju child teme – koje omogućavaju da se, bez dodatnih plagina, ili pravljenja skroz nove teme, dobiju željene izmene – tako da ostanu bez obzira na budući update verzije teme.

Na primer: “Powered by bacon & electricity” kopirajt u dnu ove stranice ubačen je pomoću child teme i par linija PHP/HTML koda.

Child tema “radi” tako što menja određene elemente originalne teme. Konkretan primer, pomoću kojeg će se lakše razumeti:

// begin copyright izmene

add_filter( 'generate_copyright','tu_custom_copyright' );
function tu_custom_copyright() {
    ?>
    <span class="copyright">© 2018 - <?php echo date("Y"); ?> I/O Gremlin</span> • Powered by bacon & electricity </div>
    <?php
}

// end copyright izmene

Tako je originalni copyright tekst napisan od strane autora teme izmenjen. U ovom slučaju to je urađeno pomoću nove funkcije “tu_custom_copyright”. Izmenama ćemo se kasnije baviti nešto detaljnije, prvo par reči o kreiranju child teme.


2. Kako napraviti child temu za WordPress

Postupak pravljenja “deteta” postojeće teme relativno je jednostavan. Potrebno je uraditi svega nekoliko stvari. Za početak, napraviti direktorijum za child temu unutar direktorijuma gde se nalaze WordPress teme, što je:
wp-content/themes

Za početak, direktorijum se može napraviti na lokalnom računaru, pa kasnije, sa svim fajlovima, uploadovati unutar wp-content/themes direktorijuma. Obično se uzme “ime_teme-child“, kao ime direktorijuma. Bez naših “ćčšžš” slova, bez praznih mesta i bez ćirilice u imenu direktorijuma (minus “-” i donja crta “_” su dozvoljeni)!

Zatim treba napraviti tekstualni fajl (u tekst editoru) nazvan “style.css” – i nikako drugačije. Taj fajl treba da sadrži određena polja, formatirana u vidu komentara, ali na početku style.css fajla, WordPress neće ignorisati ovaj komentar kao upućen samo “čitaocu fajla”, već će uzeti njegove vrednosti u obzir:

/*
 Theme Name:   GeneratePress child
 Theme URI:    https://io.bikegremlin.com/wp-content/generatepress-child/
 Description:  GeneratePress child theme
 Author:       BikeGremlin
 Author URI:   https://bike.bikegremlin.com/about-the-author/
 Template:     generatepress
 Version:      1.0.0
 License:      GNU General Public License v2 or later
 License URI:  http://www.gnu.org/licenses/gpl-2.0.html
 Tags:         light, dark, two-columns, right-sidebar, responsive-layout, accessibility-ready, woo commerce ready
 Text Domain:  generatepress-child
*/

Template:” je ime direktorijuma u kojem se nalazi “glavna” tema, na osnovu koje se pravi child tema.

Ostala polja mogu biti ispunjena po želji i neće uticati na funkcionalnost child teme.

Polja nakon (ispod) “Template” se mogu u potpunosti izostaviti (ali ne zaboravite “zatvoriti” komentar sa “*/”.

Ostaje još da se napravi functions.php tekstualni fajl. U njemu će se dodavati funkcije koje omogućavaju dodatnu funkcionalnost, ili menjaju ponašanje postojećih funkcija teme (kasnije o tome). Generalno može ostati prazan, mada neke teme “insistiraju” da sadrži određene funkcije.

Nakon ovoga, kada otvorite meni za teme, videćete svoju novu child temu ponuđenu. Aktivirajte je. 🙂

Napravljena (i uploadovana) child tema, biće prikazana u WordPress "Themes" meniju
Napravljena (i uploadovana) child tema, biće prikazana u WordPress “Themes” meniju
Slika 1


3. Primeri WordPress child tema

Pre objašnjavanja načina na koje se izgled i funkcionalnosti menjaju korištenjem child tema, navešću konkretne primere “blanko” (pripremljenih za izmene) child tema za nekoliko popularnih WordPress tema. Prikazom sadržaja style.css i functions.php fajlova child tema.

Za konkretnu temu nije loše posetiti sajt autora i videti ima li nekih posebnih preporuka, šta da se ubaci u functions.php.

3.1. Storefront child tema

Storefront je tema autora WordPress-a (Automattic), prvenstveno namenjena za WooCommerce web prodavnice. Kako napraviti child temu za nju?

style.css:

/* 
Theme Name: Storefront Child 
Version: 1.0 
Description: Child theme for Storefront. 
Author: Woo
Author URI: http://woocommerce.com 
Template: storefront 
*/

functions.php:

<?php

// Storefront Child tema - dodati svoj kod ispod (nov red), a pre znaka "?>"

?>


3.2. Astra child tema

Astra je vrlo brza i dobro napisana tema, sa dobrom integracijom za Elementor i WooCommerce.

style.css:

/**
Theme Name: Astra-child
Author: BikeGremlin
Author URI: https://io.bikegremlin.com
Description: Astra child theme
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: astra-child
Template: astra
*/

functions.php:

<?php
/**
 * Astra-child Theme functions and definitions
 *
 * @link https://developer.wordpress.org/themes/basics/theme-functions/
 *
 * @package Astra-child
 * @since 1.0.0
 */

/**
 * Define Constants
 */
define( 'CHILD_THEME_ASTRA_CHILD_VERSION', '1.0.0' );

/**
 * Enqueue styles
 */
function child_enqueue_styles() {

	wp_enqueue_style( 'astra-child-theme-css', get_stylesheet_directory_uri() . '/style.css', array('astra-theme-css'), CHILD_THEME_ASTRA_CHILD_VERSION, 'all' );

}

add_action( 'wp_enqueue_scripts', 'child_enqueue_styles', 15 );

// izmene i dodaci idu ispod, a pre znaka "?>"

?>


3.3. GeneratePress child tema

GeneratePress je jedna od omiljenih mi tema. Sa fenomenalnom dokumentacijom, podrškom i integracijom sa Elementorom. Brza, odlično napisana.

style.css:

/*
 Theme Name:   GeneratePress child
 Theme URI:    https://io.bikegremlin.com/wp-content/generatepress-child/
 Description:  GeneratePress child tema
 Author:       BikeGremlin
 Author URI:   https://bike.bikegremlin.com/about-the-author/
 Template:     generatepress
 Version:      1.0.0
 License:      GNU General Public License v2 or later
 License URI:  http://www.gnu.org/licenses/gpl-2.0.html
 Tags:         light, dark, two-columns, right-sidebar, responsive-layout, accessibility-ready, woo commerce ready
 Text Domain:  generatepress-child
*/

functions.php:

<?php
/**
 * GeneratePress child theme functions and definitions.
 *
 * Add your custom PHP in this file. 
 * Only edit this file if you have direct access to it on your server (to fix errors if they happen).
 */

function generatepress_child_enqueue_scripts() {
	if ( is_rtl() ) {
		wp_enqueue_style( 'generatepress-rtl', trailingslashit( get_template_directory_uri() ) . 'rtl.css' );
	}
}
add_action( 'wp_enqueue_scripts', 'generatepress_child_enqueue_scripts', 100 );

// dodati svoje funkcije i kod nakon ovoga, a pre znaka "?>"

?>


4. Izmene izgleda pomoću style.css child teme

Možete videti kod svog WordPress sajta, pritiskanjem F12 u većini browsera dok gledate sajt i biranjem “Elements” opcije.

Konkretan primer izmene: u situaciji kada se gledaju slike galerija, nije mi se sviđalo da dugmići za “šerovanje” stoje u kadru, hteo sam da budu nevidljivi. Prvo je trebalo utvrditi gde je definisan stil za te dugmiće, što je urađeno postupkom prikazanim na slici 2:

Otkrivanje stila dugmića za šerovanje
Otkrivanje stila dugmića za šerovanje
Slika 2

Slika je dosta sitna, ali moraćete mi verovati na reč da pod brojem 4 na slici 2 stoji vrednost “.heateor_sss_vertical_sharing”. Tako da sam izmenio “vertikalnu” poziciju ovih dugmića, kako se ne bi prikazivali dok se gleda Lightbox galerija slika, izmenom style.css fajla child teme:

/* pomeranje shared ikona u pozadinu galerije  */

.heateor_sss_vertical_sharing {
	z-index:100000 !important;
}

/* kraj izmene pomeranje shared ikona u pozadinu galerije  */

Sada, kada je stil “.heateor_sss_vertical_sharing” definisan (i) u child temi, on će uzeti primat nad onim definisanim u glavnoj temi. Na ovaj način pomoću child teme menja se izgled sajta – sve definisano u child temi ima primat.

Rezultat ovakvih izmena može se videti recimo na sajtu studija za šminkanje u Novom Sadu.

Drugi primer je promena pozadine. Definicija izgleda je “ulovljena” metodom prikazanom u slici 2, a urađeno je više izmena:

/* izmena pozadinske slike i stilisanje iste - ne zaboravite "zatvoriti" komentar */

body {
background-image: url( 'https://io.bikegremlin.com/wp-content/uploads/2019/03/io_bikegremlin_background2.jpg' );
background-position: center center;
background-size: cover;
background-repeat: no-repeat;
background-attachment: fixed;
}

/* kraj izmena pozadinske slike i stilisanje iste */


5. Izmene izgleda i funkcionalnosti pomoću functions.php child teme

Kod izmena pomoću functions.php fajla, moguće je napisati potpuno novu, dodatnu funkciju. Na primer, funkcija za prikazivanje “child” stranica “glavnije” strane (po hijerarhiji), pomoću pre-definisanog short-code:

// listanje child stranica - kao i drugih stranica istog nivoa ako stranica nije top nivoa

function relja_list_child_pages() { 
 
global $post; 
 
if ( is_page() && $post->post_parent )
 
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
else
    $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
 
if ( $childpages ) {
 
    $string = '<ul>' . $childpages . '</ul>';
}
 
return $string;
 
}
 
add_shortcode('relja_child_pages', 'relja_list_child_pages');

// kraj listanja child stranica

Dodata je funkcija “relja_list_child_pages”. Sada će shortcode “relja_child_pages” dodati spisak stranica. Primer sa ovog sajta je klik na link “Usluge” u glavnom meniju.

Takođe, postojeće funkcije teme se mogu re-definisati. Jedan od načina za to je korištenje “hooks”. Slika to lepše objašnjava: evo prikaza hoook-ova za GeneratePress temu.

A ovo je kod kojim se postojeća funkcija menja, kako bi se kontakt telefon i mejl prikazali u plavoj liniji na vrhu strane jednog sajta:

// tanka plava linija na vrhu

add_action( 'generate_before_header', 'blue_top_menu' );
function blue_top_menu(){
     ?>
        <div class="blue-top-menu"><a title="[email protected]" alt="[email protected]" href="mailto:[email protected]" class="link-blue-top-menu">[email protected] <a title="+38163666999" alt="+38163666999" href="tel:+38163666999" class="link-blue-top-menu">+38163666999</a></div>
            
    <?php  
}

// kraj tanka plava linija na vrhu

Definisana je nova funkcija “blue_top_menu” i iskorišten je hook “generate_before_header” kao mesto za njeno prikazivanje.

Kako to izgleda u praksi, može se videti na ovom sajtu za jedrenje u Grčkoj.


6. Čemu sve to?

Savršeno logično pitanje, iako sam ga ostavio za kraj.

Osnovni izgled i funkcionalnost WordPress sajta može se dobiti izborom odgovarajuće teme. Ipak, nije uvek moguće pronaći gotovu, kvalitetnu temu koja odgovara vašim potrebama u potpunosti.

Naravno, postoji i puno dobrih plaginova, kojima se dosta toga može dodati i prilagoditi. Ipak, mislim da je bolje rešiti stvari bez plaginova, pogotovo one “sitnije” koje se mogu relativno lako i brzo rešiti. Zašto?

  • Svaki plagin dodatno opterećuje sajt, dodajući često i više nego što je neophodno (kako u funkcionalnosti, tako i u kodu koji se mora izvršiti pri svakoj poseti stranice).
  • Svaki plagin je potencijalni bezbednosni rizik.
  • Zbog prethodne dve stavke: što manje plagina, to bolje. Koristiti samo one koji su zaista neophodni. Pravite sve druge, “manje” izmene pomoću child teme.

Pri tome, ove izmene se mogu raditi direktno na samoj temi. Ali: u slučaju apdejta teme, na primer, izmene će biti izgubljene. Child tema je način da se željene izmene na lak način učine “trajnim”.


7. Zaključak

Kada birate temu za svoj WordPress sajt, radite to pažljivo i promišljeno. Naravno, tema mora pružiti izgled i funkcionalnost (u najvećoj meri) koji su vam potrebni. Ali takođe proverite i koliko se redovno ažurira, kakva je podrška i dokumentacija (bitno zbog izmena pomoću child teme), kao i koliko je dobro napisana i “brza”. Napisao sam niz članaka o optimizaciji sajta, koji taj deo detaljnije objašnjavaju.

Napravite odmah child temu.

Share...

Komentiraj

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.