Codex

Interested in functions, hooks, classes, or methods? Check out the new WordPress Code Reference!

mk:Дете теми

WordPess дете темата е тема која ги наследува функционалностите од друга тема, наречена родителска тема, и овозможува уредување и додавање на нови функционалности. Дете темата е најбезбеден и наједноставен начин да се модифицираат веќе постоечки теми, без разлика дали правиме мали или големи промени. Наместо менувње на датотеките на главната тема, вие можете да оздадете дете тема. Дете темата ги наследува сите темплејти и функционалности од својата родителска теми, но овозможува правење на промени врз родителската тем, бидејќи кодот од дете темата се презапишува врз кодот од родителската тема.

Зошто да користите дете тема?

Доколку сакате да модифицирате веќе постоечка тема, најдобар начин е со креирање на дете тема, отколку да правиме промени директно на родителската тема. Постојат неколку причини зошто да се користат деца теми:

  • Доколку правите промена врз постоечка тема и за истата има надгрдба, вашите промени ќе се изгубат. Со користењето на дете тема, ќе се надогради само родителската тема. or functionality) and still keep your changes.
  • Го забрзува времето н развој.
  • Ова е добар начин да започнете со учење на развој на WordPress теми.

Како да создадете дете тема

  • Child Theme directory structure
    Создадете нов директориум за вашата дете тема. Директориумот во кој се наоѓаат темите е wp-content/themes. Вие можете да го крстите директориумот како сакате, но препорачливо е да го содржи името на родителската тема со „-child“ на крајот од името. Како на пример, доколку вашата родителска тема има име twentytwelve, директориумот за дете темата би бил twentytwelve-child.
  • Во директориумот за дете темата, создадете датотека со име style.css. Таа е единствената датотека која е потребна за да се направи дете тема. Каскадниот стил мора да ги содржи следните линии код:
/*
Theme Name:     Twenty Twelve Child
Theme URI:      http://example.com/
Description:    Дете тема на Twenty Twelve
Author:         Вашето име
Author URI:     http://example.com/about/
Template:       twentytwelve                             
Version:        0.1.0
*/

Овие линии можете да ги промените според вашата тема. Единствени задолжителни линии се Theme Name и Template. Template е името на директориумот на родителската тема Во овој случај родителска тема е Twenty Twelve, па директориумот во кој таа се наоѓа е twentytwelve. Доколку сакате да направите дете тема на родителска тема која е во директориум со име „некое-лудо-име-за-тема“, тогаш Template: некое-лудо-име-за-тема.

  • Каскадниот стил на дете темата ќе го пребрише каскадниот стил на родителската тема, но постои можност родителскиот каскаден стил да го вклучите и овде. За да го сторите тоа, на почетокот на style.css во дете темата, додадете:
@import url("../twentytwelve/style.css");

Променете го twentytwelve со името на директориумот на вашата родителска тема. Оваа линија мора да биде на врвот од датотеката и доколку додадете други CSS правила пред @import, тоа нема да работи.

  • Активирајте ја дете темата. Најавете се во работната табла и отидете во Изглед > Теми.

Датотеки

Доколку сакате да направите промени на повеќе датотеки, вашата дете тема може да ги пребрише сите датотеки од родителската тема: едноставно, вклучете датотека со исто име во директориумот на дете темата, и таа ќе ја пребрише родителската. Како на пример, доколку сакате да направите промена во PHP кодот во заглавието, вие можете да го вклучите header.php во вашата дете тема, и таа датотека ќе се користи наместо header.php од родителската тема.

Исто така, во дете темата можете да вклучувате и филтри кои не се вклучени во родителската тема. Како на пример, можете да создадете повеќе спецификации за темплејтот кои не се пронајдени во родителската тема. За повеќе информации погледнете ја хиерархијата на темплејти.

Користење на functions.php

За разлика од style.css, functions.php од дете темата не ги пребришува функциите од родителската тема. Наместо тоа, датотеката се вчитува заедно со родителската functions.php. (Поточно, functions.php од дете темата се вчитува пред таа од родителската тема).

На тој начин, functions.php од дете темата нуди паметен начин на модифицирање на функционалностите од родителската тема. Да претпоставиме дека сакаме да додадете PHP функција на нашата тема. Најбрз начин е да го отвориме functions.php и да ја напушеме функцијата. Но, тоа не е паметна одлука: Следниот пат кога вашата тема ќе се надогради, функцијата ќе исчезне. Но, постои алтернативен начин кој е многу попаметен: можете да создадете посебна functions.php датотека во дете темата и вашите функции да ги ставате таму. Функциите ќе ја извршуваат истата задача и од таму, но предност е тоа што истите нема да бидат опфатени со идна надоградба на родителскататема. Не ја копирајте целата содржина од functions.php на родителската тема, во functions.php на дете темата.

Структурата на functions.php е еднотавна: На врвот се отвара PHP таг и истиот се затвара на крајот, додека измеѓу се наоѓа остатокот од PHP кодот. Во датотеката можете да имате колку сакате функции. Во примерот подолу е прикажана функција која додава favicon во head-от на вашиот HTML.

function favicon_link() {
    echo '<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />' . "\n";
}
add_action( 'wp_head', 'favicon_link' );


СОВЕТ ЗА РАЗВИВАЧИТЕ НА ТЕМИ: Фактот дека functions.php од дете темата се вчитува најпрво значи дека вие можете да ги пребришете функциите на оригиналната тема. Пример:

if ( ! function_exists( 'theme_special_nav' ) ) {
    function theme_special_nav() {
        //  Do something.
    }
}

На овој начин, дете темата ќе ја замени PHP функцијата создадена од родителската тема.

Референцирање / Вклучување датотеки во вашата дете тема

Кога треба да вклучите датотеки кои се во вашата дете тема, користете get_stylesheet_directory(). Бидејќи родителската style.css датотека е заменета со style.css од дете темата и вашата style.css датотека живее во директориумот на дете темата. get_stylesheet_directory() покажува кон директориумот на дете темата, а не кон родителскиот.

Еве пример кој го покажува тоа: Користејќи require_once, get_stylesheet_directory референцира до датотека која се наоѓа во директориумот на дете темата.

require_once( get_stylesheet_directory() . '/my_included_file.php' );

Останати корисни информации

Користење на типови на написи

Дете темата ги наследува типовите на написи кои се дефинирани од родителската тема. Но, кога создавате дете тема, бидете внимателни при користењето на add_theme_support('post-formats'), бидејќи со тоа се пребришуваат типовите од родителската тема, не се додаваат на нив.

RTL поддршка

За да поддржите RTL јазици, додадете ја rtl.css датотеката во вашата тема со содржина:

/*
Theme Name: Twenty Twelve Child
Template: twentytwelve
*/

@import url("../twentytwelve/rtl.css");

WordPress автоматски го вчитува rtl.css само доколку is_rtl(). Дури и доколку родителската тема не содржи rtl.css датотека, препорачливо е да ја додадете во дете темата.

Интернациолизација

Дете темите, како и останатите екстензии, може да бидат преведувани на повеќе јазици користејќи ги getttext функциите. Дополнително погледнете ја страницата I18n for WordPress Developers. Оваа секција е наменета за специјалните околности при интернациолизирање на дете темите.

  • Започнете со додавање на languages директориумот: my-theme/languages/
  • Следно, потребно е да биде вчитан textdomain. За тоа се користи load_child_theme_textdomain() која се поставува во functions.php додека се извршува after_setup_theme.
<?php
/**
 * Setup My Child Theme's textdomain.
 *
 * Declare textdomain for this child theme.
 * Translations can be filed in the /languages/ directory.
 */
function my_child_theme_setup() {
	load_child_theme_textdomain( 'my-child-theme', get_stylesheet_directory() . '/languages' );
}
add_action( 'after_setup_theme', 'my_child_theme_setup' );
?>

Во овој момент, хард-кодираните стринг во дете темата се спремни за преведување. Еве пример од печатењето на фразата „Code is Poetry“:

<?php
_e( 'Code is Poetry', 'my-child-theme' );
?>

Текст доменот дефиниран во load_child_theme_textdomain() треба да се користи за преведување на сите стрингови во дете темата. Во случај кога имаме датотеки од родителската тема кои треба да бидат вклучени, textdomain-от треба да биде променет од родителскиот во тој што е дефиниран во дете темата.

Ресурси