Разработка тем для WordPress: освоение основных практик и лучших подходов к использованию файла `functions.php`

4-минутное чтение
2026-03-13
2026-06-03
2,351
Я получаю комиссионные, когда вы совершаете покупки по ссылкам ниже, без дополнительных затрат для вас.

Определение файла `functions.php` и его основная функция.

В темах WordPress…functions.phpЭто особый и мощный файл. По сути, это плагин, предназначенный для конкретной темы WordPress; он загружается при активации темы и прекращает работать при её деактивации. Основная функция этого файла — добавлять пользовательские настройки и изменять поведение самого ядра системы WordPress, без необходимости модифицировать исходные файлы или создавать отдельные плагины. Это позволяет разработчикам централизованно управлять всей пользовательской логикой темы: от простых функций (например, использования фирменных изображений) до более сложных механизмов (регистрации пользовательских типов статей, создания панелей настроек темы, а также использования хуков и фильтров).

Пониманиеfunctions.phpОбласть применения этого файла имеет решающее значение: он действителен только внутри темы, к которой относится, что обеспечивает портативность функций и целостность самой темы. Записывая код в этом файле, вы можете безопасно добавлять практически любые функции на свой сайт, сохраняя при этом гибкость при будущих обновлениях и миграции тем. Для как начинающих, так и опытных разработчиков глубокое изучение и освоение этого файла является необходимым этапом на пути от модификации базовых тем к разработке более сложных решений.

Параметры по умолчанию функции тематизации и наиболее часто используемые функции

Включение функции поддержки тем (theme support feature)

Каждая современная тема для WordPress должна четко указывать, какие основные функции она поддерживает. Для этого необходимо…add_theme_support()Эта функция предназначена для того, чтобы сообщить WordPress, какие возможности ваша тема поддерживает и как она может их реализовывать. К таким возможностям относятся, например, создание миниатюр статей, использование пользовательского логотипа, поддержка HTML5-тегов и другие функции.

Рекомендуемое чтение Руководство по разработке тем для WordPress: создание профессиональной адаптивной темы с нуля.

if ( ! function_exists( 'mytheme_setup' ) ) {
    function mytheme_setup() {
        // 支持文章和评论的Feed链接
        add_theme_support( 'automatic-feed-links' );
        // 启用文章特色图像功能
        add_theme_support( 'post-thumbnails' );
        // 启用自定义Logo功能
        add_theme_support( 'custom-logo', array(
            'height'      => 100,
            'width'       => 400,
            'flex-height' => true,
            'flex-width'  => true,
        ) );
        // 对文章格式和页面标题的HTML5标记支持
        add_theme_support( 'html5', array( 'search-form', 'comment-form', 'comment-list', 'gallery', 'caption' ) );
        add_theme_support( 'title-tag' );
    }
}
add_action( 'after_setup_theme', 'mytheme_setup' );

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

Ультахост (UltaHost) – хостинг-провайдер, предоставляющий услуги хостинга для сайтов, построенных на платформе WordPress.
Гарантия возврата средств в течение 30 дней, неограниченная пропускная способность интернет-канала и объем баз данных, бесплатная защита от DDoS-атак. При покупке на срок 3 лет предоставляется скидка в размере 501 ТБ до 4 ТБ.

Регистрация в навигационном меню и боковой панели

Полноценная тема обычно включает в себя настраиваемый навигационный меню и область с гаджетами (боковую панель). Для этого необходимо использовать соответствующие инструменты и функции разработчика.register_nav_menus()иregister_sidebar()Функция.

// Регистрация расположения меню темы
function mytheme_register_menus() {
    register_nav_menus( array(
        'primary' => __( 'Главное навигационное меню', 'mytheme' ),
        'footer'  => __( 'Нижнее меню', 'mytheme' ),
    ) );
}
add_action( 'after_setup_theme', 'mytheme_register_menus' );

// Регистрация области виджетов
function mytheme_widgets_init() {
    register_sidebar( array(
        'name'          => __( 'Главная боковая панель', 'mytheme' ),
        'id'            => 'sidebar-1',
        'description'   => __( 'Добавьте сюда виджеты для главной боковой панели.', 'mytheme' ),
        'before_widget' =&gt; ' '<section id="%1$s" class="widget %2$s">',
        'after_widget'  =&gt; '</section>'перед заголовком '<h2 class="widget-title">',
        'after_title'   =&gt; '</h2>',
    ) );
}
add_action( 'widgets_init', 'mytheme_widgets_init' );

Коллективное управление скриптами и шаблонами

Для соблюдения лучших практик разработки в WordPress и предотвращения конфликтов все файлы JavaScript и CSS должны быть загружены через определенные каналы или механизмы.wp_enqueue_scriptsЗагружается хук. WordPress предоставляетwp_enqueue_style()иwp_enqueue_script()Для реализации этой цели используется функция.

function mytheme_scripts() {
    // 引入主题的主样式表
    wp_enqueue_style( 'mytheme-style', get_stylesheet_uri(), array(), wp_get_theme()->get( 'Version' ) );

// 引入Google Fonts
    wp_enqueue_style( 'mytheme-google-fonts', 'https://fonts.example.com/family=Open+Sans&display=swap', array(), null );

// 引入自定义JavaScript文件,并依赖jQuery
    wp_enqueue_script( 'mytheme-navigation', get_template_directory_uri() . '/js/navigation.js', array( 'jquery' ), wp_get_theme()->get( 'Version' ), true );

// 为脚本局部化数据,将PHP变量安全传递到JavaScript
    wp_localize_script( 'mytheme-navigation', 'mythemeScreenReaderText', array(
        'expand'   => __( '展开子菜单', 'mytheme' ),
        'collapse' => __( '收起子菜单', 'mytheme' ),
    ) );
}
add_action( 'wp_enqueue_scripts', 'mytheme_scripts' );

Этот метод обеспечивает правильное обработание зависимостей (например, jQuery) и позволяет легко контролировать место загрузки скриптов (в верхней или нижней части страницы). Для стилей и скриптов, используемых в интерфейсе административной панели, следует применять аналогичные подходы.admin_enqueue_scriptsКрючок.

Глубокая настройка с использованием хуков и фильтров

Понимание действий и фильтров

Ключевая расширяемость WordPress во многом обусловлена его архитектурой плагинов, а именно использованием так называемых «хуков» (Hooks). Хуки делятся на два типа: действия (Actions) и фильтры (Filters). Действия позволяют выполнять пользовательский код в определенные моменты выполнения программы, в то время как фильтры предназначены для изменения данных, передаваемых в процессе ее работы.functions.phpЭто отличное место для использования этих хуков.

Рекомендуемое чтение От нуля до единицы: практическое руководство по разработке темы WordPress от начала до конца.

Например, вы можете использовать…wp_headДля добавления пользовательского кода в определенные части страницы можно воспользоваться специальными функциями или инструментами, предназначенными для этой цели.the_contentФильтры изменяют содержимое статей при их отображении.

Создание пользовательских типов статей

Для создания контентных типов, которые выходят за рамки стандартных типов “Статья” и “Страница”, необходимо зарегистрировать пользовательские контентные типы. Обычно это делается в настройках системы управления контентом.initВыполняется внутри хука (hook).

function mytheme_register_portfolio() {
    $labels = array(
        'name'               => _x( '作品集', '作品集通用名称', 'mytheme' ),
        'singular_name'      => _x( '作品', '作品单数名称', 'mytheme' ),
        'menu_name'          => __( '作品集', 'mytheme' ),
    );
    $args = array(
        'labels'             => $labels,
        'public'             => true,
        'publicly_queryable' => true,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => array( 'slug' => 'portfolio' ),
        'capability_type'    => 'post',
        'has_archive'        => true,
        'hierarchical'       => false,
        'menu_position'      => 5,
        'supports'           => array( 'title', 'editor', 'thumbnail', 'excerpt', 'comments' ),
    );
    register_post_type( 'portfolio', $args );
}
add_action( 'init', 'mytheme_register_portfolio' );

Изменение параметров по умолчанию для выполнения запросов и формата вывода результатов

Фильтры позволяют точно настраивать содержимое, отображаемое на веб-сайте. Например, вы можете выбрать, чтобы на странице архива отображались только статьи определенной категории, или изменить длину их резюме.

hosting.com Общий хостинг
Высокая производительность благодаря процессорам AMD EPYC, SSD-накопителям NVMe и LiteSpeed, круглосуточная экспертная поддержка, передовые меры безопасности, включая SSL, защиту от грубой силы, вредоносных программ и DDoS, экономия до 73%
// 修改主页查询,排除特定分类
function mytheme_exclude_category_home( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'cat', '-5, -9' ); // 排除ID为5和9的分类
    }
}
add_action( 'pre_get_posts', 'mytheme_exclude_category_home' );

// 修改摘录长度
function mytheme_excerpt_length( $length ) {
    return 30; // 将默认的55词改为30词
}
add_filter( 'excerpt_length', 'mytheme_excerpt_length' );

Лучшие практики в области безопасности, производительности и обслуживания

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

Во-первых, необходимо обработать вводимые пользователем данные с помощью функций экранирования (эскапации) и проверки их корректности. В WordPress предусмотрено множество функций для обеспечения безопасности.esc_html()esc_url()иsanitize_text_field()Убедитесь, что при передаче любых динамических данных на фронтенд используются соответствующие функции эскапирования.

Во-вторых, обратите внимание на организацию кода. Код, насчитывающий более сотни строк…functions.phpФайлы станут сложными в обслуживании. Лучший вариант — использовать их в качестве “лодеров” (loaderов), разделив код с различными функциями на отдельные PHP-файлы, расположенные в соответствующих каталогах тем (theme directories). Затем…functions.phpЧерезrequire_onceВведение.

Рекомендуемое чтение Быстро освоите разработку тем для WordPress: полное руководство от начального уровня до практического применения.

// 在functions.php中组织代码
require_once get_template_directory() . '/inc/theme-setup.php';
require_once get_template_directory() . '/inc/enqueue-scripts.php';
require_once get_template_directory() . '/inc/custom-post-types.php';
require_once get_template_directory() . '/inc/custom-functions.php';

Что касается производительности, следует избегать ситуаций, когда…functions.phpНе следует выполнять времязатратные запросы к базе данных или операции с файлами непосредственно на странице, особенно в коде, который запускается при каждом загрузке страницы. Используйте кэширование, разумно выбирайте моменты для выполнения определенных действий (с помощью хуков), и своевременно удаляйте хуки для неиспользуемых функций.

В конце добавьте четкие китайские комментарии к вашим пользовательским функциям и хукам, а также используйте поля для описания тем (такие, как были показаны выше).mythemeНеобходимо подготовить все строки, предназначенные для вывода пользователю, к работе в международных условиях (то есть с учетом различий в языках и культурах). Это значительно упростит последующее сотрудничество, а также локализацию контента.

Общий хостинг InterServer
Общий хостинг $2.50 USD в месяц, первый месяц $0.1 USD промо-код tryinterserver, 461 скрипт облачных приложений, установка в один клик.

резюме

functions.phpФайлы являются сердцем и центральной нервной системой разработки тем для WordPress. Они обеспечивают поддержку основных функций темы, возможности регистрации пользователей через меню и боковые панели, стандартизацию использования скриптов и стилей, а также позволяют осуществлять глубокую, неинвазивную настройку системы с помощью действий (actions) и фильтров (filters). Благодаря этим файлам разработчики получают огромные возможности для формирования поведения WordPress в соответствии со своими требованиями. Соблюдение современных практик разработки, таких как безопасное программирование, оптимизация производительности и модульная структура кода, поможет вам создавать качественные и надежные решения.functions.phpЭтот файл не только мощный, но и надежный в использовании, а также прост в обслуживании и расширении. Овладение им означает, что вы переходите от роли пользователя готовых шаблонов к роли настоящего создателя таких шаблонов.

Часто задаваемые вопросы

Как безопасно изменять файл functions.php в рамках подтемы (subtopic)?

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

Почему добавленный мной код не работает?

Существует несколько распространённых причин, по которым код не работает так, как ожидается. Во-первых, необходимо проверить на наличие синтаксических ошибок: даже незначительная ошибка в PHP-синтаксисе может привести к тому, что весь код перестанет исполняться корректно.functions.phpПопытка выполнения файла не увенчалась успехом. Вы можете попробовать снова выполнить команду, активировав необходимые параметры или настройки.WP_DEBUGСначала проверьте, нет ли ошибок в коде. Затем убедитесь, что код был добавлен в правильное место (например, функция определена внутри нужного хука, и этот хук вообще вызывается). Третье – проверьте, нет ли конфликтов между именами функций или хуков; для пользовательских функций рекомендуется использовать уникальные префиксы. Наконец, убедитесь, что ваши изменения были сохранены, и очистите кэш браузера и системы WordPress при просмотре страницы.

Как добавить пользовательские шорткоды в файл functions.php?

Вfunctions.phpЧасто возникает необходимость добавлять короткие коды в текст. Для этого используются различные методы и инструменты.add_shortcode()Это можно легко реализовать с помощью функций. Во-первых, вам необходимо определить функцию-обратный вызов (callback), которая будет генерировать содержимое вывода для краткого кода, а затем использовать эту функцию для выполнения необходимых действий.add_shortcode()Зарегистрируйте его.

// 定义短代码回调函数
function mytheme_contact_button_shortcode( $atts ) {
    // 解析短代码属性
    $atts = shortcode_atts( array(
        'text' =&gt; '联系我们',
        'url'  =&gt; '/contact',
    ), $atts, 'contact_button' );

// 返回安全的HTML输出
    return '<a href="/ru/' . esc_url( $atts['url'] ) . '/" class="contact-button">'`. esc_html($atts['text'])`.'</a>');

// Регистрация короткого кода
add_shortcode( 'contact_button', 'mytheme_contact_button_shortcode' );

После этого вы сможете использовать это содержимое в статьях, страницах или маленьких приложениях.[contact_button text="点击联系" url="/contact-us"]Пора использовать этот короткий код.

По сравнению с отдельными плагинами, добавление функций в файл functions.php имеет свои преимущества и недостатки.

Вfunctions.phpОсновное преимущество добавления таких функций в тему заключается в их тесной интеграции и удобстве использования. Весь код, связанный с этими функциями, входит в состав самой темы, что облегчает их управление и распространение, особенно если эти функции являются ключевыми элементами внешнего вида и пользовательского опыта сайта. Однако у этого подхода есть и недостаток: функции связаны с жизненным циклом темы, поэтому при смене темы они могут исчезнуть, что приведет к потере части содержимого или функциональности сайта. Независимые плагины, напротив, позволяют разделить функции на элементы, не связанные с внешним видом сайта; поэтому они сохраняются при смене темы, что делает их более подходящими для универсальных функций (таких как SEO-настройки, формы, кэширование). Оптимальной практикой считается размещение функций, относящихся исключительно к визуальному аспекту сайта (например, специальные настройки макета или стилевые расширения, характерные для конкретной темы), в отдельные модули плагина.functions.phpКогда функции относятся к уровню обработки данных или к общей логике (например, настройка пользовательских типов статей, улучшения системы управления пользователями), особенно если необходимо сохранить их при использовании в разных тематиках, следует создавать отдельные плагины.