WordPress как на ладони
Официальная конференция по WordPress в Moскве 18-19 августа, начало в 9:00 wordpress jino

Как вносить изменения в шаблоны дочерней темы, поверх шаблонов родительской темы?

Как вносить изменения в шаблоны дочерней темы добавляя (или переопределяя) функционал, а не копируя исходный файл родительской темы в дочернюю? Так же как это происходит с файлом style.css родительской и дочерней темы?

Например, мне надо чтобы в шаблоне одиночной записи page.php не выводился заголовок названия страницы. 1.Просто копирую шаблон page.php в папку дочерней темы. 2. удаляю там код между тегами «Head»

<header><h1 class="title"><?php the_title(); ?></h1>/header>

и получаю шаблон одиночной записи без заголовка. Или создаю в дочерней файл page_bez_zagolovka.php вношу туда измененения и назначаю страницам из админки уже этот шаблон.

А я хочу вносить изменения и дополнения в шаблоны дочерней темы, оставляя родительский неизменным. это возможно? как импортировать исходный код в файл дочерней темы, так же, как это делается в style.css c помощью команды вставляемой в файл style.css дочерней темы:

@import url('../родительская тема/style.css');

Не знаю понятно ли объяснила, я новичек и никак не могу найти ответ(( В кодексе написано, что достаточно создать файл с таким же именем как и у родительской темы и между тегами вносить свои коды. Они исполняться поверх кодов шаблонов родительских страниц. Расширяют и переопределяют функции родительской темы. Но когда я создаю, в папке дочерней темы тот же файл page.php
c кодом:

<?php
/*здесь код отмены вывода названия страницы в шаблоне одиночной записи*/
?>

т.е. пустой - у меня слетают все страницы использующие этот шаблон. как я понимаю, потому что новый файл исполняется поверх старого и он пустой. и вордпресс не знает где брать другой код. и движок не знает, что ему надо искать дальше код в родительской теме?

Можно, для чайника, написать какой именно код надо вставить в файлы function.php или page.php и других шаблонах дочерней темы, чтобы вордпресс знал, что это добавочная функция, и дальше надо брать код из шаблона родительской темы?

1
3.6 года назад
  • 0
    Kama6693

    Вы все верно расписали. Дело там в том, что css и php это разные вещи. Правила CSS можно "перебивать" другими правилами и те которые записаны позднее будут иметь приоритет над теми, что записаны ранее. Собственно потому и называется "каскадная таблица стилей".

    А в PHP так сделать не получится, там все "наоборот": например, если функция определена, то её нельзя переопределить это вызовет фатальную ошибку скрипта (кроме случаев, когда это предусмотрено создателем функции).

    По сути для дочерних тем есть 4 варианта изменить родительскую тему:

    1. Дополнить файл style.css родительской темы: создать его в дочерней, импортировать данные родительской темы и переопределить свойства стилей (это вы описали).

    2. Дополнить файл functions.php: создать его в дочерней теме и дописать свои функции, хуки. Если родительская тема позволяет, переопределить функции родительской темы.

    3. Переопределить .php файл родительской темы: скопировать нужный файл в дочернюю тему и изменить его как угодно (вы это описали).

    4. Изменить вывод информации через фильтры WordPress. Ваш пример, вы не хотите создавать файл в дочерней теме, только для того, чтобы убрать заголовок на странице, типа is_page(). Тогда вам нужно посмотреть как выводится заголовок в родительской теме, если автор темы предусмотрел этот момент, то можно. Если нет, то нельзя. Допустим, в теме заголовок выводится через функцию темы theme_the_title(), а эта функция определена в functions.php так:
    if ( ! function_exists('theme_the_title') ) {
    	function theme_the_title() {
    		?>
    		<h1><?php the_title() ?></h1>
    		<?php
    	}
    }

    Проверка function_exists('theme_the_title') дает возможность переопределить функцию. И вы можете удалить заголовок, определив такую же функцию в дочерней теме в файле functions.php:

    function theme_the_title() {
    	if( is_page() ) return '';
    	?>
    	<h1><?php the_title() ?></h1>
    	<?php
    }

    Так вам не нужно будет полностью копировать файл родительской темы, чтобы удалить заголовок на is_page странице. Но это не всегда возможно.

    Также автор может предусмотреть возможность изменить часть файла темы, с помощью фильтров. Автор определяет фильтры в теме, через которые можно изменять вывод, не копируя файл в дочернюю тему. Например, опять нужно удалить заголовок для типов is_page(). В родительской теме заголовок выводится как-то так:

    $title = '<h1>'. get_the_title() .'</h1>';
    echo apply_filters('theme_the_title', $title);

    Тут мы можем отфильтровать заголовок, определив фильтр в functions.php дочерней темы:

    add_filter('theme_the_title', 'delete_title_on_single');
    function delete_title_on_single(){ return ''; }
    
    // Коротко можно записать так
    add_filter('theme_the_title', '__return_empty_string');

    Ваш вопрос:

    как импортировать исходный код в файл дочерней темы, так же, как это делается в style.css

    Никак! php - это совсем не css.

    Обновление: статья: Дочерние темы WordPress

    Alina 3.6 года назад

    Спасибо большое за подробный ответ! Ваш сайт лучший, буду изучать как отче наш и рекомедовать остальным! + 1000 к карме!!wink)

    Комментировать
  • 0

    Спасибо!

    Kama 6 месяцев назад

    Пожалуйста. Если это спасибо за ответ, не надо его как еще один ответ писать, коммент к ответу ж есть...

    Комментировать
На вопросы могут отвечать только зарегистрированные пользователи. Вход . Регистрация