Languages: English • Македонски • (Add your language)
WordPess дете темата е тема која ги наследува функционалностите од друга тема, наречена родителска тема, и овозможува уредување и додавање на нови функционалности. Дете темата е најбезбеден и наједноставен начин да се модифицираат веќе постоечки теми, без разлика дали правиме мали или големи промени. Наместо менувње на датотеките на главната тема, вие можете да оздадете дете тема. Дете темата ги наследува сите темплејти и функционалности од својата родителска теми, но овозможува правење на промени врз родителската тем, бидејќи кодот од дете темата се презапишува врз кодот од родителската тема.
Доколку сакате да модифицирате веќе постоечка тема, најдобар начин е со креирање на дете тема, отколку да правиме промени директно на родителската тема. Постојат неколку причини зошто да се користат деца теми:
/* 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: некое-лудо-име-за-тема.
@import url("../twentytwelve/style.css");
Променете го twentytwelve со името на директориумот на вашата родителска тема. Оваа линија мора да биде на врвот од датотеката и доколку додадете други CSS правила пред @import, тоа нема да работи.
Доколку сакате да направите промени на повеќе датотеки, вашата дете тема може да ги пребрише сите датотеки од родителската тема: едноставно, вклучете датотека со исто име во директориумот на дете темата, и таа ќе ја пребрише родителската. Како на пример, доколку сакате да направите промена во PHP кодот во заглавието, вие можете да го вклучите header.php во вашата дете тема, и таа датотека ќе се користи наместо header.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.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. Оваа секција е наменета за специјалните околности при интернациолизирање на дете темите.
my-theme/languages/
<?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-от треба да биде променет од родителскиот во тој што е дефиниран во дете темата.