2015-09-13 2 views
4

Я довольно новичок в разработке и кодировании тем Wordpress и недавно начал тему для детей, основанную на теме Сиднея, которая предлагается бесплатно в Wordpress. Я попал в ловушку, я не могу разобраться.Как переопределить родительский файл в дочерней теме Wordpress, когда требуется родительский файл в functions.php

Существует файл PHP, который вызывается через родительский functions.php, что мне нужно настроить и не трогать, когда я обновляю родительскую тему. Этот файл называется template-tags.php и находится внутри папки «inc». Теперь, предположительно, согласно Wordpress codex (о котором я проконсультировался, прежде чем спрашивать здесь), любые повторяющиеся файлы в дочерней теме (кроме functions.php) автоматически переопределяют те в родительской теме. Я не знаю, работает ли это так же для файлов внутри папок, но я думаю, что тот факт, что этот конкретный файл вызывается в родительском functions.php, делает его так, что он загружается в файл родителя. Я предполагаю это, потому что то же самое относится к стилям CSS и JS-файлов сценариев, которые мне пришлось вложить в дочернюю тему, чтобы получить мои собственные настроенные версии.

Однако в кодексе Wordpress ничего не сказано как переопределить файл, который уже вызывается в родительском functions.php. И я ничего не могу найти где-нибудь еще (даже в этих вопросах: WordPress child theme override a parent theme include, Overiding parent theme functions with a Child theme in WordPress, How to override a not plugable parent theme function from a non function.php file?, Wordpress child theme - functions.php copy - cannot "redeclare"), который мне помогает.

Итак, подведем итоги:

  • Родительская тема имеет «вкл» папку с файлом template-tags.php в нем.
  • В моей дочерней теме также есть папка «inc» с файлом template-tags.php.
  • Родитель ТЕМЫ functions.php имеет следующий код, который вызывает его файл:

    require get_template_directory() . '/inc/template-tags.php'; 
    
  • Все, что я пытаюсь добавить в functions.php файл моего ребенка, который вызывает его файл template-tags.php приведет к ошибке, так как очевидно, WP может» t требуется одно и то же дважды.

Короткие закомментировать вызов в материнской компании functions.php, который does't мне кажется, практическое решение, но больше работы вокруг, я понятия не имею, что еще делать.

Буду признателен за вход в это время. Заранее спасибо!

+0

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

+0

Привет, Дэвид, спасибо за ответ. Если я правильно вас понимаю, вы рекомендуете связать свой файл, в котором связан файл родителя. Если это так, я мог бы также отрезать эту ссылку в родительском файле, а ссылка в функциях моего ребенка .php будет единственной. Но тогда я должен был бы это помнить и входить и делать это каждый раз, когда тема обновляется. И, похоже, это часто случается. Я начал в середине прошлой недели и уже сегодня обновился; 15-го, потому что это версия 1.15. Я бы предпочел избежать необходимости всегда делать это. Благодаря! – QuestionerNo27

+0

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

ответ

1

У меня была аналогичная проблема, когда я хотел внести изменения в макет заголовка в моей дочерней теме в template-tags.php.

Решение, которое сработало для меня, состояло в использовании следующей строки в моем файле functions.php в моей дочерней теме: требует get_stylesheet_directory(). '/inc/template-tags.php';

Я использовал исходную строку из родительского элемента в functions.php: требует get_template_directory(). '/inc/template-tags.php';

Использование функции get_template_directory() не работает, потому что эта функция всегда будет возвращать родительский каталог темы.

Использование функции get_stylesheet_directory() работает, потому что она извлекает каталог дочерней темы.

Да Я знаю, что имя функции «get_stylesheet_directory()» не очень интуитивно понятное, но на самом деле оно вернет местоположение каталога Child Theme.

Понадобилось некоторое время, чтобы это выяснить, выполнив поиск в Интернете. Я нашел это ссылочный онлайн, который помог мне в поиске: How to override a parent file in a child Wordpress theme when parent file is being required in functions.php

5

Привет @ QuestionerNo27,

Это было долгое время, так как вы спрашивали об этом, но я также искал ответ в течение 2 дней, как я сталкиваясь с той же проблемой. Существует ответ, просто как «Привет»:

  1. Вы не нуждаетесь в inc папку в детской теме, ни файл template-tags.php.
  2. Вы просто должны скопировать функцию (ы) вы хотите переопределить от родителя template-tags.php и вставить его в детской теме functions.php В моем случае, я хотел, чтобы переопределить function mytheme_posted_on() от моего родителя template-tags.php

И теперь он работает. Благодаря https://wordpress.org/support/topic/inc-folder-in-child-theme (Stephencottontail answer)

+0

Я пробовал это, но это не работает для меня, хотя ..... –

Смежные вопросы