Как перекрыть тематические родительские функции

Автор:
Nurlan Kemelbekov

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

Дочерняя тема это самый простой способ изменить существующую тему. Если вносите изменения в родительской теме напрямую, то при обновлении темы, вы потеряете все изменения.

Как создать дочернюю тему WordPress

При наследовании родительской темы нужно всего лишь включить файл style.css и файл functions.php. Другие тематические файлы наследуются от родительской темы. При добавлении файла шаблона для дочерней темы будут переопределяться файлы родительской темы, но этого не произойдет с файлом functions.php. Оба файла functions.php из дочерних и родительских тем будут загружены в приложение.

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

Рассмотрим пример родительской темы, имеющую функцию для отображения социальных связей для сайта, но имеет ссылку только на Facebook.

//Родительская тема//
<?php
function display_social_links()
{
?>
<a href="http://www .facebook. com">Facebook</a>
<?php
}
?>

Во всех файлах темы есть возможность отобразить социальные связи, используя описанную выше функцию.

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

Чтобы переопределить родительскую функцию необходимо добавить ту же функцию в дочернюю тему functions.php и добавить новую ссылку в Twitter.

//Дочерняя тема//
<!--?php function display_social_links() { ?-->
<a href="http://www.facebook.com">Facebook</a>
<a href="http://www.twitter.com">Twitter</a>
<!--?php } ?-->

Мне жаль говорить, но этот код сломает сайт, вы получите ошибку функция уже определена в родительском файле functions.php. Это потому, что функция дочерней темы не перекрыла функцию родительской темы и будет просто определять эту функцию, прежде файла родителя. Таким образом, вы сможете отключить эту функцию, если функция родительского файла заворачивается, как function_exists.

//Родительская тема//
<!--?php if( !function_exists('display_social_links') ) { function display_social_links() { ?-->
<a href="http://www.facebook.com">Facebook</a>
<!--?php } } ?-->

Этот код означает, что если функция display_social_links не был определен, то можно определить его с помощью этой функции внутри заявления IF. Если тематические функции дочерней темы определены перед родительской, то, если функция display_social_links определяется в детской теме, то код не будет идти в этом заявлении и можно избежать ошибку «функция уже определена».

Это означает, что можно перекрыть только родительские тематические функции, если они завернуты в function_exists.

<?php
if( !function_exists('display_social_links') )
{

}
?>

Если функция в теме не имеет это заявление IF, вы не сможете отключить эту функцию.

Как заменить functions.php темы сайта своим плагином



Рекомендуемый контент

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я просто хотел сказать, как сильно я ценю Ваш комментарий на мой пост. Спасибо Вам !!