Поддержка Проблемы и решения Перезаписать функции родительской темы в дочерней

  • Здравствуйте!
    У меня тема ClassiPress, но думаю, проблема актуальна и для других тем…
    Создал дочернюю тему и мне нужно перезаписать функции из родительской, эти функции находятся в файлах: /inludes/functions.php, /includes/views.php и /framework/kernel/functions.php — я создал такие же пустые файлы в дочерней теме с такими же путями, добавил свои функции, даже добавлял add_action…after_theme_setup чтобы эти функции вызывались после родительских, но подмена функций не происходит, даже если в одном из перечисленных файлов добавить echo ‘test’; или сделать ошибку синтаксиса намеренно, ничего не происходит. Такое ощущение, что все файлы кроме файлов в корне темы не подгружаются вообще…
    Зато файл стилей дочерней и файлы шаблонов из корня темы отлично работают…
    В родительской функции написаны без условий if (function_exixsts…
    Подскажите, пожалуйста, в чем может быть дело?

Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Модератор Yuri

    (@yube)

    но подмена функций не происходит

    Переопределение уже определенной функции может только привести к фатальной ошибке php.

    В родительской функции написаны без условий if (function_exixsts…

    Чтобы деточка работала полноценно, родительская Тема должна быть готова «стать матерью». Если же автор Темы не озаботился правильным подключением шаблонов и/или не сделал функции условно-определяемыми (через if function_exists), то всё — в морг, как говорится.

    В родительской функции написаны без условий if (function_exixsts…

    морг 🙂

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

    Если же автор Темы не озаботился правильным подключением шаблонов и/или не сделал функции условно-определяемыми (через if function_exists), то всё — в морг, как говорится.

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

    ТС: при необходимости серьезных изменений приходится наплевать на механизм дочерних тем и править саму тему (с изменением ее имени).

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

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

    А это никак не поможет?

    function my_function() {
    	// Действия
    }
    add_action( 'after_setup_theme', 'my_function' );

    Если прописать add_action после каждой темы дочки?
    А в этом случае do_action( ‘after_setup_theme’ ); надо вызывать из родительской?

    ТС: при необходимости серьезных изменений приходится наплевать на механизм дочерних тем и править саму тему (с изменением ее имени).

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

    Посмотрел, мои измененные функции вызывают еще другие функции и в нескольких файлах, в итоге получается в дочке будет половина файлов родителя — это если менять имена функций…
    А кто-нибудь пробовал всякие команды из расширения php APD, типа: override_function?
    Может с помощью них можно решить проблему?

    • Ответ изменён 6 лет, 4 месяца назад пользователем eu7730.
Просмотр 6 ответов — с 1 по 6 (всего 6)
  • Тема «Перезаписать функции родительской темы в дочерней» закрыта для новых ответов.