• Решено wpuser

    (@wp-userphp)


    В теме некоторые функции находятся не в functions.php, а в /functions/fe/library.php.
    В functions.php: $fe_path = TEMPLATEPATH . '/functions/fe/';

    В дочерней теме нужно изменить некоторые функции, находящиеся в /functions/fe/library.php родительской темы.

    Копия /functions/fe/library.php в дочку с исправлением функций эффекта не даёт.
    Просто переписывать эти функции в functions.php тоже не получается — ВП ругается — не могу переопределить функцию (указывая на родительскую тему).

    В общем прошу помощи, как изменить функции в дочке, не трогая родителя?

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Автор wpuser

    (@wp-userphp)

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

    Как всё-таки делать по-человечески?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

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

    if ( ! function_exists( 'twentyeleven_setup' ) ) :
    function twentyeleven_setup() {
    	//  ...
    }
    endif;

    Если в родительской теме они не обёрнуты в условие !function_exists() — остаётся переименовать функции в дочерней, скопировать все файлы, в которых они вызываются, и поменять вызовы, что вы и сделали.

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

    Автор wpuser

    (@wp-userphp)

    для которых автор темы это предусмотрел

    Тут вообще интересная (или мутная) история 🙂
    functions.php состоит только из определения переменных (в которых указаны пути к каталогам с файлами функций) и последующим их подключения:

    $fe_path = TEMPLATEPATH . '/functions/fe/';
    ....
    require_once ($fe_path . 'setup.php');
    require_once ($fe_path . 'library.php');

    Функции же не проверяются на существование. Ни в этих файлах, ни в тех, где они вызываются (content.php, footer.php и тп).

    В общем, спасибо, Сергей, за пояснения.

    А да, последний вопрос: TEMPLATEPATH в примере кода выше — это дочки или родителя берётся?

    Модератор Sergey Biryukov

    (@sergeybiryukov)

    Live and Learn

    TEMPLATEPATH — каталог родительской темы, STYLESHEETPATH — дочерней.

    Не вполне очевидно, но так исторически сложилось 🙂

    Автор wpuser

    (@wp-userphp)

    TEMPLATEPATH — каталог родительской темы, STYLESHEETPATH — дочерней.

    то-то я думаю почему это картинки нужно дублировать( бо часть запрашивается с дочки, часть — с родителя) 🙂

    Понятно, спасибо ещё раз.

Просмотр 5 ответов — с 1 по 5 (всего 5)
  • Тема «Функции дочерней темы. В родительской не на месте.» закрыта для новых ответов.