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

\"Как

Удалите подключение стилей родительской оболочки из functions.php, если стили собираются через Webpack или Vite. Избыточная нагрузка и конфликт кэширования – классическая ловушка. Оставьте только то, что реально используется. Пример удаления:


function remove_parent_styles() {
wp_dequeue_style(\'parent-style\');
wp_deregister_style(\'parent-style\');
}
add_action(\'wp_enqueue_scripts\', \'remove_parent_styles\', 20);

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

Важно: любое дублирование кода без веской причины ухудшает поддержку и увеличивает риски при обновлениях.

Избавьтесь от global $post в шаблонах. Лучше использовать get_the_ID() или передавать ID через аргументы. Глобальные переменные – болото. Одна правка – и всё ломается.


function custom_content_filter($content) {
if (is_singular(\'post\')) {
$content .= \'

Читайте также: ...

\';
}
return $content;
}
add_filter(\'the_content\', \'custom_content_filter\');

Удалите подключение неиспользуемых скриптов через wp_dequeue_script. Нет необходимости тянуть jQuery, если весь интерфейс на Alpine.js. Экономьте каждый килобайт. Это важно. Время загрузки – конкурентное преимущество.

Внимание! Любой сторонний плагин может сломать кастом, если вы не ограничили его область применения.

Меняете структуру страниц? Используйте template_include для выбора шаблона, а не десятки условий в index.php. Пример минимализма:


add_filter(\'template_include\', function($template) {
if (is_page(\'kontakt\')) {
return get_stylesheet_directory() . \'/templates/kontakt.php\';
}
return $template;
});

Не переопределяйте функции через if (!function_exists()). Это костыль из прошлого. Используйте хуки, фильтры, объекты. Современный подход – композиция, а не подмена.

Работа с ACF? Заворачивайте поля в проверки. Поле может быть удалено, но вы уже зависите от него. Всегда используйте get_field() с fallback:


$cta = get_field(\'call_to_action\') ?: \'По умолчанию\';

Подключайте только то, что нужно. Пишите меньше, но точнее. Вопрос не в количестве изменений, а в их обоснованности. Всё остальное – лишний груз.

Настройка шаблона single.php для изменения отображения записей

Сразу перепишите вызов заголовка: вместо the_title() используйте get_the_title() в связке с условием, чтобы кастомизировать отображение по типу записи:


<?php if ( get_post_type() === \'product\' ) { echo \'Товар: \' . get_the_title(); } else { the_title(); } ?>

Следом – отключите отображение стандартного контента через the_content(), если вы используете кастомные поля. Не повторяйтесь. Уберите дубли. Используйте ACF или get_post_meta().


<?php echo get_post_meta( get_the_ID(), \'описание_товара\', true ); ?>

Ненавидите громоздкий HTML от редактора? Замените на строгую верстку: вставляйте контент вручную через блоки <section> с хардкодом. Да, это боль. Но контроль – в ваших руках.

Хотите убрать featured image? Просто вырезайте the_post_thumbnail(). Или добавьте условие:


<?php if ( has_post_thumbnail() && get_post_type() !== \'новости\' ) { the_post_thumbnail(); } ?>


<?php
$related = new WP_Query([
\'post_type\' => get_post_type(),
\'posts_per_page\' => 3,
\'post__not_in\' => [get_the_ID()],
\'tax_query\' => [[
\'taxonomy\' => \'категория\',
\'field\' => \'term_id\',
\'terms\' => wp_get_post_terms( get_the_ID(), \'категория\', [\'fields\' => \'ids\'] ),
]]
]);
if ( $related->have_posts() ) {
while ( $related->have_posts() ) {
$related->the_post();
echo \'<li>\' . get_the_title() . \'</li>\';
}
wp_reset_postdata();
}
?>

Внимание! Не забудьте сбросить глобальный $post через wp_reset_postdata(), иначе получите баги в футере.

Внесите кастомную верстку вместо the_content(): создайте блоки с <article>, <aside>, <figure> и склейте в нужном порядке. WordPress не запрещает. Но вы – контролируете.

Не трогайте get_header() и get_footer() – вместо этого подключайте альтернативные: get_header(\'product\'), get_footer(\'clean\'). Создайте их отдельно. Разорвите шаблон на части.

Разработчикам недостаточно? Тогда подключайте template_include через functions.php и подменяйте шаблон в рантайме. Это уже не просто PHP – это контроль ядра.


add_filter( \'template_include\', function( $template ) {
if ( is_singular(\'product\') ) {
return get_stylesheet_directory() . \'/single-product.php\';
}
return $template;
});

Никаких универсальных решений. Только точечные правки под задачу. Пишите грязно, но честно. Пусть шаблон работает под вас, а не наоборот.

Подключение собственного стиля через functions.php без потери обновлений

Регистрируй кастомный CSS через wp_enqueue_scripts. Не трогай оригинальные файлы. Не вставляй код напрямую в header.php. Используй хук.

Пример минимального и корректного подключения:


add_action(\'wp_enqueue_scripts\', \'load_custom_styles\', 20);
function load_custom_styles() {
wp_enqueue_style(\'my-style\', get_stylesheet_directory_uri() . \'/custom.css\', array(), \'1.0\');
}

Смысл цифры 20 – приоритет. Хочешь, чтобы стили перебили базовые – ставь выше 10. Но тестируй. Иногда придётся использовать !important, но злоупотреблять этим – тупик.

Файл custom.css должен находиться в корне. Не в /assets, не в /css, а именно рядом с functions.php. WordPress ищет строго по пути, заданному в get_stylesheet_directory_uri().

Не пиши get_template_directory_uri(). Это сломает всё. Этот вызов тянет путь к родительской структуре. Нам нужна только своя надстройка.

Важно! Не регистрируй стили через wp_register_style(), если не знаешь, зачем это. В 90% случаев wp_enqueue_style() – безопаснее и проще.

Порядок подключения – критичен. Если новый CSS зависит от Bootstrap или Tailwind – добавляй массив зависимостей:


wp_enqueue_style(\'my-style\', get_stylesheet_directory_uri() . \'/custom.css\', array(\'bootstrap\'), \'1.0\');

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

Внимание! Никогда не редактируй style.css напрямую. WordPress может перезаписать файл при обновлении структуры. Все добавления – только в отдельный файл.

Хочешь сделать порядок подключения абсолютным? Добавь wp_dequeue_style() перед своей функцией. Но знай, что это может снести другие зависимости. Применяй осмысленно.

В финале: подключай как инженер, а не как дизайнер. Минимум ручных вставок. Только API WordPress. Так код выживает между обновлениями.

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

Удаляй действия родителя только если уверен в их точке подключения. Неправильный приоритет – и ты ломаешь весь рендер. Используй remove_action и remove_filter строго после подключения родительского кода. Лучшее место – after_setup_theme.

add_action(\'after_setup_theme\', function() {
remove_action(\'wp_head\', \'parent_theme_function\');
});

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

  • Проверяй приоритеты. Они критичны.
  • Дублируй хук своим методом только после удаления родительского.
  • Никогда не оставляй оба активными – непредсказуемость обеспечена.

Важно: если ты используешь remove_action в файле functions.php, не забудь, что функции родителя могут не быть загружены к этому моменту. Оберни вызов в хук after_setup_theme или init с приоритетом выше, чем у оригинала.

Для фильтров – аналогичная стратегия. Отключаешь, заменяешь. Но будь внимателен: некоторые фильтры цепляются к массивам или объектам. Их нельзя просто \»вырезать\». Нужно заменить поведение аккуратно.

add_filter(\'excerpt_length\', function() {
return 20;
}, 99);

Работает, если приоритет выше. Если родитель использует 999 – поднимай до 1000.

Некоторые темы внедряют свои хуки внутри классов. Тогда тебе нужен глобальный объект, например:

add_action(\'after_setup_theme\', function() {
global $parent_theme;
remove_action(\'init\', [$parent_theme, \'init_hooks\']);
});

Без доступа к объекту – забудь о переопределении. Придется переписать полностью.

Внимание! Если хук встроен в шаблон без условия, отключить его нельзя – только через override шаблона.

Следи за конфликтами. Один хук, два поведения – результат непредсказуем. Всегда проверяй did_action и has_action, чтобы не гоняться за фантомами:

if (has_action(\'wp_footer\', \'some_function\')) {
remove_action(\'wp_footer\', \'some_function\');
}

Используй wp_hooks плагин для отладки. Он покажет все подключенные действия и приоритеты. Без этого ты работаешь вслепую.

Обходи стороной хуки в шаблонных тегах. Там логика – жесть. Только полное переопределение функции спасет.

Будь хакером, но умным. Не стреляй в систему. Анализируй, тестируй, проверяй. Один хук – один шанс.

Оптимизация загрузки ресурсов через изменение дочерней темы

Отключайте ненужные стили и скрипты. Не используете Gutenberg? Уберите связанные с ним файлы:


function remove_gutenberg_assets() {
  if (!is_admin()) {
    wp_dequeue_style(\'wp-block-library\');
    wp_dequeue_style(\'wp-block-library-theme\');
    wp_dequeue_style(\'wc-block-style\');
    wp_dequeue_script(\'wp-embed\');
  }
}
add_action(\'wp_enqueue_scripts\', \'remove_gutenberg_assets\', 100);

Результат – минус 100–200 КБ на каждой странице.

Заменяйте jQuery на vanilla JS. Чистый JavaScript быстрее и меньше по весу. Подключение jQuery можно отключить:


function remove_jquery() {
  if (!is_admin()) {
    wp_deregister_script(\'jquery\');
  }
}
add_action(\'wp_enqueue_scripts\', \'remove_jquery\', 99);

Оставлять jQuery ради одного слайдера? Глупо.

Важно! Убедитесь, что отключаемый скрипт действительно не используется. Проверяйте консоль браузера после изменений.

Используйте defer и async. WordPress не делает это автоматически. Нужно внедрять вручную:


function add_defer_attribute($tag, $handle) {
  $defer_scripts = [\'some-script-handle\'];
  if (in_array($handle, $defer_scripts)) {
    return str_replace(\' src\', \' defer src\', $tag);
  }
  return $tag;
}
add_filter(\'script_loader_tag\', \'add_defer_attribute\', 10, 2);

Скрипты перестают блокировать отрисовку. Рендер быстрее. Пользователь доволен.

Собирайте стили в один файл. Множественные подключения CSS через wp_enqueue_style – зло. Объедините и минифицируйте:

  • Пример: style.css + font.cssmain.min.css
  • Подключайте через одну функцию, избегайте дублирования

Не хотите сборку вручную? Используйте gulp или webpack.

Помните: каждый HTTP-запрос – это миллисекунды, которые вы крадете у пользователя. Уберите их без сожалений.

Заменяйте встроенные стили шрифтов на preload. Ускоряет визуальный отклик:


function preload_fonts() {
  echo \'<link rel=\"preload\" href=\"/wp-content/themes/your-theme/fonts/font.woff2\" as=\"font\" type=\"font/woff2\" crossorigin>\';
}
add_action(\'wp_head\', \'preload_fonts\');

Особенно актуально при использовании кастомных гарнитур.

Итог. WordPress грузит мусор по умолчанию. Ваше дело – выбросить его. Быстро. Жестко. Без сожалений.

Читайте также:  Плагин Typecase для кастомизации шрифтов в теме WordPress Twenty Fifteen

Оставьте комментарий

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