Файл functions.php является одним из самых важных файлов любой темы WordPress. Именно через него разработчики добавляют новые возможности сайта, подключают стили и скрипты, регистрируют меню, миниатюры записей, создают собственные типы записей, изменяют стандартное поведение WordPress и WooCommerce, а также используют хуки и фильтры. Если вы хотите кастомизировать WordPress без изменения ядра системы, практически всегда изменения выполняются именно в файле functions.php. В этом руководстве подробно рассмотрим возможности файла, лучшие практики и приведем множество готовых примеров кода.

Что такое functions.php

Файл functions.php представляет собой обычный PHP-файл, который автоматически подключается WordPress при загрузке активной темы. По функциональности его можно сравнить с собственным мини-плагином, однако существует важное отличие:
  • functions.php работает только при активной теме;
  • при смене темы все функции перестают работать;
  • для постоянного функционала лучше использовать собственный плагин.

Где находится functions.php

/wp-content/themes/ваша-тема/functions.php
Если используется дочерняя тема, рекомендуется изменять именно ее файл:
/wp-content/themes/child-theme/functions.php
Так изменения сохранятся после обновления основной темы.

Как безопасно редактировать functions.php

  • создайте резервную копию файла;
  • используйте дочернюю тему;
  • редактируйте через FTP или файловый менеджер хостинга;
  • проверяйте код на тестовом сайте;
  • не удаляйте существующий PHP-код.

Структура файла

<?php // Ваш код function my_function() { } add_action('init', 'my_function');
Закрывающий тег ?> в конце файла обычно не используется.

Подключение поддержки миниатюр

add_theme_support('post-thumbnails');
После этого появится возможность загружать изображения записи.

Регистрация меню

function my_register_menu() { register_nav_menus(array( 'primary' => 'Главное меню', 'footer' => 'Меню подвала' )); } add_action('after_setup_theme', 'my_register_menu');

Добавление собственного размера изображения

add_image_size( 'catalog', 800, 600, true );
Использование:
<?php the_post_thumbnail('catalog'); ?>

Подключение CSS

function my_styles() { wp_enqueue_style( 'main-style', get_stylesheet_uri(), array(), '1.0' ); } add_action( 'wp_enqueue_scripts', 'my_styles' );

Подключение JavaScript

function my_scripts(){ wp_enqueue_script( 'main-js', get_template_directory_uri() . '/js/main.js', array('jquery'), '1.0', true ); } add_action( 'wp_enqueue_scripts', 'my_scripts' );

Удаление версии WordPress

remove_action( 'wp_head', 'wp_generator' );

Отключение Emoji

remove_action( 'wp_head', 'print_emoji_detection_script', 7 ); remove_action( 'wp_print_styles', 'print_emoji_styles' );

Добавление области виджетов

function my_sidebar(){ register_sidebar(array( 'name' => 'Основной сайдбар', 'id' => 'sidebar-main', )); } add_action( 'widgets_init', 'my_sidebar' );

Регистрация собственного типа записи

function register_portfolio(){ register_post_type('portfolio', array( 'label' => 'Портфолио', 'public' => true, 'supports' => array( 'title', 'editor', 'thumbnail' ) )); } add_action( 'init', 'register_portfolio' );

Добавление собственного типа таксономии

register_taxonomy( 'projects', 'portfolio', array( 'label' => 'Проекты' ) );

Добавление поддержки логотипа

add_theme_support( 'custom-logo' );

Отключение Gutenberg

add_filter( 'use_block_editor_for_post', '__return_false' );

Изменение длины анонса

function my_excerpt_length(){ return 25; } add_filter( 'excerpt_length', 'my_excerpt_length' );

Изменение текста "Читать далее"

function my_excerpt_more(){ return '...'; } add_filter( 'excerpt_more', 'my_excerpt_more' );

Добавление класса в меню

function add_menu_class($classes){ $classes[]='menu-item-custom'; return $classes; } add_filter( 'nav_menu_css_class', 'add_menu_class' );

Удаление лишних размеров изображений

function remove_sizes($sizes){ unset($sizes['1536x1536']); unset($sizes['2048x2048']); return $sizes; } add_filter( 'intermediate_image_sizes_advanced', 'remove_sizes' );

Отключение масштабирования больших изображений

add_filter( 'big_image_size_threshold', '__return_false' );

Изменение качества JPEG

add_filter( 'jpeg_quality', function(){ return 82; } );

Добавление собственного класса в body

function my_body_class($classes){ $classes[]='custom-theme'; return $classes; } add_filter( 'body_class', 'my_body_class' );

Что нельзя делать в functions.php

  • изменять файлы ядра WordPress;
  • размещать тысячи строк кода без структуры;
  • дублировать функции плагинов;
  • использовать устаревшие функции;
  • редактировать файл без резервной копии.

Когда лучше использовать собственный плагин

Если функциональность должна работать независимо от активной темы (например, регистрация типов записей, SEO-функции, интеграции с API, обработчики форм, WooCommerce-логика), рекомендуется создавать собственный плагин вместо размещения кода в functions.php.

Полезные рекомендации

  • используйте дочернюю тему;
  • группируйте функции по назначению;
  • добавляйте комментарии к коду;
  • используйте префиксы в именах функций для предотвращения конфликтов;
  • проверяйте код на наличие синтаксических ошибок;
  • не храните в functions.php большие библиотеки — выносите их в отдельные файлы и подключайте через require_once.
Файл functions.php — мощный инструмент для расширения возможностей WordPress. С его помощью можно подключать стили и скрипты, регистрировать меню, миниатюры, виджеты, собственные типы записей, изменять работу ядра, использовать хуки и фильтры, а также реализовывать практически любые доработки темы. Для максимальной безопасности рекомендуется работать через дочернюю тему, регулярно создавать резервные копии и использовать собственные плагины для функциональности, не связанной напрямую с оформлением сайта.

Метки: