• Здравствуйте!
    Пытаюсь править сайт с помощью «дочерней темы», с целью возможности дальнейшего «безболезненного» обновления родительской. В принципе, все получается (по инструкциям из гугл), за исключением правок в файле functions.php: т.е. добавлять новые функции в дочернюю тему получается, а вот редактировать существующие — пока нет.. Если вставить в дочерний functions.php функцию (с изменениями) из родительского — то сайт перестает работать (если править в родительском файле, то нормально)… Предполагаю, что, наверное, эту функцию надо сначала отключить для родительского файла, а уже потом прописывать в дочерний — но вот как это делается?

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • Вот здесь вам понадобится умение вместо добавления функций в functions.php использовать «самопальные плагины» что во всех случаях удобней и надежней чем добавление кода в functions.php. Подробно об этом

    Да, это конечно все очень интересно и полезно — я наверное воспользуюсь этой статьей для новых функций, которые я прописал (например создание новых виджетов (именно самих виджетов, а не сайдбаров) — в functions.php они как-то совсем «не смотрятся»… вообще, я хотел их сделать отдельным файлом — но тоже не знаю как пока)…
    Но вопрос мой был немножко другой: есть функция в родительской теме, мне нужно ее чуть-чуть «подредактировать» (буквально добавить пару строчек). Как это сделать оптимально в дочерней теме?

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

    Я понял смысл этого варианта, у меня, кажется, даже стоит такой «самопальный» плагин, который меняет формат отображения месяца в постах с «25 Январь» на «25 января» (он не совсем самопальный, но суть та же — отдельный файл php подключается как плагин)… но все же я надеюсь, есть какое-то более «правильное» решение — зачем мне подключать внешний плагин, если этот функционал относится только к данной теме?
    Но, все равно, спасибо за полезный совет — пригодится )

    https://wpmag.ru/2013/dochernie-temy-wordpress/ Вот еще вам на помощь

    Как это сделать оптимально в дочерней теме?

    Поскольку

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

    всё зависит от того, как эта функция написана. Можно ли её переопределить. (наличие if (!function_exists) в первую очередь)

    А нормальная документация к теме может прояснить много вопросов.

    «прямо перед родительским»? (( я надеялся что наоборот (после) — можно в дочернем файле отключить что ненужно в родительском и добавить свое…
    Функция, к примеру, прописана так (начало):
    function ct_chosen_body_class( $classes ) {
    global $post;
    $full_post = get_theme_mod( ‘full_post’ );
    $pagination = ( get_query_var( ‘paged’ ) ) ? get_query_var( ‘paged’ ) : 1;
    $full_width_post = get_theme_mod( ‘full_width_post’ );
    if ( is_home() && $pagination == 1 && $full_width_post != ‘no’ )
    { $classes[] = ‘posts-page-1’; } и т.д…
    и мне нужно добавить строчки:
    if ( is_archive() && $pagination == 1 && $full_width_post != ‘no’ ) { $classes[] = ‘posts-page-1’; }
    т.е. просто добавить еще одно условие..

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Скорее всего где-то в файле functions.php есть примерно такая строка:
    add_filter( 'body_class', 'ct_chosen_body_class' );

    Вы можете попробовать удалить этот фильтр и добавить свою функцию:

    remove_filter( 'body_class', 'ct_chosen_body_class' );
    add_filter( 'body_class', 'child_body_class' );

    И в функции child_body_class уже написать тот код, который Вам нужен.

    Да, есть такая строчка..) Первая попытка «замены функции», к сожалению, не увенчалась успехом (возможно я что-то лишнее удалил или вставил). Завтра еще раз попробую на свежую голову, спасибо.

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

    нет, наверное с удалением все-таки правильнее… спасибо, кажется все получилось

Просмотр 11 ответов — с 1 по 11 (всего 11)
  • Тема «Дочерняя тема (functions.php)» закрыта для новых ответов.