Функции темы (functions.php)

wordpress-function
functions.php файл, где вы можете добавлять уникальные функции для вашей WordPress темы. Он может быть использован для подключения к основным функций WordPress, чтобы ваша тема более модульной, расширяемой и функциональной.

Что такое functions.php?

Файл functions.php ведет себя как WordPress плагин, добавляя новые возможности и функциональность к WordPress сайту. Вы можете использовать его для вызова функций WordPress и определить свои собственные функции.

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

Есть преимущества и компромиссы использования плагина WordPress или использования functions.php.

WordPress плагин:

  • требуется специфический, уникальный текст заголовка;
  • хранится в wp-content/plugins, как правило, в подкаталоге;
  • выполняется при загрузке страницы только когда активирован;
  • применяется ко всем темам; и
  • должен иметь единственную цель — например, предлагает возможности улучшения поисковой оптимизации или помощь с резервным копированием.

В свою очередь, functions.php файл:

  • не требует уникальный текст заголовка;
  • хранится в подкаталоге темы в wp-content/themes;
  • выполняется только тогда, когда находится в каталоге активной темы;
  • применяется только к этой теме (если изменяется тема, функции больше не могут быть использованы); и
  • может иметь множество блоков кода, используемых для различных целей.

Каждая тема имеет свой собственный файл функций, но только код в активной теме в functions.php запускается фактически. Если в вашей теме уже есть файл функций, вы можете добавить код к нему. Если нет, то вы можете создать обычный текстовый файл с именем functions.php и добавить в каталог вашей темы, как описано ниже.

Дочерняя тема может иметь свой собственный functions.php файл. Добавление функции в файл функций дочерней темы — безопасный способ изменить родительский тему. Таким образом, когда родительская тема обновляется, вы не должны беспокоиться об исчезновении вашей недавно добавленной функции.

Примечание: Хотя functions.php дочерней темы загружается WordPress прямо перед functions.php родительской темы, он не отменяет его. Файл functions.php дочерней темы может быть использован для добавления или замены функций родительской темы. Кроме того, functions.php загружается после любых файлов плагинов.

Часто нужно изменить поведение функций родительской темы WordPress. В дочерней теме можно переопределить, изменить или удалить нужную функцию — подробнее о том как это сделать, описано в этой статье.

С functions.php вы можете:

  • Использовать WordPress хуки. Например, с excerpt_length фильтром Вы можете изменить длину отрывка записи (по-умолчанию 55 слов).
  • Включить возможности WordPress с помощью add_theme_support(). Например, включить миниатюры записи, форматы записи и навигационные меню.
  • Определить функции, которые вы хотите использовать в нескольких файлах шаблонов темы.

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

Примеры

Ниже несколько примеров, которые вы можете использовать в вашем файле functions.php, чтобы поддерживать различные функции. Каждый из этих примеров разрешены в вашей теме, если вы решите подать ее в каталог тем WordPress.org.

Установка темы

Большинство возможностей темы должны быть включены с помощью установочной «setup» функции, которая запускается, когда тема будет активирована. Как показано ниже, каждая из этих функций может быть добавлена к вашему functions.php файлу, чтобы активировать рекомендуемые функции WordPress.

Примечание: Важно, чтобы ваши функции имели префикс с названием вашей темы. Все примеры ниже используют myfirsttheme_ как такой префикс, префикс должен быть настроен на основе имени вашей темы.

Для создания этой начальной функции, начните новую функцию под названием myfirsttheme_setup(), например, так:

Примечание: В приведенном выше примере, функция myfirsttheme_setup запускается, но не закрыта. Будьте уверены, что закрыли свои функции.

Автоматический Feed ссылок

Автоматический feed ссылок включает RSS каналы по умолчанию для записей и комментариев. Эти каналы будут отображаться в <head> автоматически. Они могут быть вызваны с помощью add_theme_support().

НАВИГАЦИОННЫЕ меню

Пользовательские меню навигации позволяют пользователям редактировать и настраивать меню в админ-панели меню, предоставляя пользователям drag-and-drop интерфейс различных меню в их теме.

Вы можете настроить несколько меню в functions.php. Они могут быть добавлены с помощью register_nav_menus() и вставлены в тему, используя wp_nav_menu(), как описано далее в этом руководстве. Если ваша тема будет иметь более чем одно меню, вы должны использовать массив. В то время как некоторые темы не будут иметь пользовательских меню навигации, рекомендуется, чтобы вы допускали такую возможность для легкой настройки.

Каждое из меню, которое вы определяете, можно вызвать позднее с помощью wp_nav_menu() и используя имя, присвоенное (например, primary) как theme_location параметр.

Загрузка текстового домена

Темы могут быть переведены на несколько языков, сделав строки в вашей теме доступными для перевода. Чтобы сделать это, вы должны использовать load_theme_textdomain(). Для получения более подробной информации о доступности вашей темы для переводов, читайте раздел интернационализации данного руководства.

Миниатюры записей

Миниатюры записей позволяют пользователям выбирать изображения, для представления своих записей. Ваша тема может решить, как отображать их в зависимости от ее дизайна. Например, вы можете выбрать, чтобы миниатюры записей отображались для каждой записи при просмотре их архивов. Или, вы можете использовать большое изображение на домашней странице. Хотя не каждая тема нуждается в миниатюрах записи, рекомендуется, что бы вы включали их поддержку.

Форматы записи

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

Пример первичной настройки

Включение всех перечисленных выше особенностей даст вам functions.php файл, подобный показанному ниже. Комментарии были добавлены для ясности в будущем.

Как показано в нижней части этого примера, необходимо добавить требуемую add_action() конструкцию, обеспечивающую загрузку функции myfirsttheme_setup.

Ширина контента

Ширина контента добавлена в functions.php файл, чтобы удостовериться , что ни содержимое, ни какой-либо другой контент не сломает контейнер сайта. Ширина контента устанавливает максимально допустимую ширину для любого содержимого, добавляемого на ваш сайт, в том числе загруженных изображений. В приведенном ниже примере, область содержимого имеет максимальную ширину 800 пикселей. Никакой контент не будет больше этого числа.

Другие функции

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

  • Пользовательские заголовки
  • Сайдбары (области виджетов)
  • Пользовательский фон
  • Добавление редактора стилей
  • HTML5
  • Тег TITLE

Ваш functions.php файл

Если вы решите включить все функции, перечисленные выше, то ваш functions.php может выглядеть примерно так.

Навигация по разделам:

3 комментария

  1. Alex

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

    Функция родительской темы:
    add_filter( 'enlightenment_entry_meta_args', 'enlightenment_filter_entry_meta_args' );

    function enlightenment_filter_entry_meta_args( $args ) {
    if( is_singular() && doing_action( 'enlightenment_entry_footer' ) ) {
    $args['format'] = '%8$s %1$s %9$s %4$s';
    } elseif( is_singular( 'jetpack-portfolio' ) ) {
    $args['format'] = '';
    $meta = enlightenment_theme_option( 'portfolio_meta' );
    if( $meta['author'] ) {
    $args['format'] .= '%1$s ';
    }
    if( $meta['date'] ) {
    $args['format'] .= '%2$s ';
    }
    if( $meta['project_type'] ) {
    $args['format'] .= enlightenment_project_types( array( 'echo' => false ) );
    }
    if( $meta['comments'] ) {
    $args['format'] .= '%5$s ';
    }
    if( $meta['edit_link'] ) {
    $args['format'] .= '%6$s';
    }
    } else {
    $args['format'] = '';
    $meta = enlightenment_theme_option( 'post_meta' );
    if( $meta['author'] ) {
    $args['format'] .= '%1$s ';
    }
    if( $meta['date'] ) {
    $args['format'] .= '%2$s ';
    }
    if( $meta['category'] ) {
    $args['format'] .= '%3$s ';
    }
    if( $meta['comments'] ) {
    $args['format'] .= '%5$s ';
    }
    if( $meta['edit_link'] ) {
    $args['format'] .= '%6$s';
    }
    }

    return $args;
    }

    Ответить
  2. Alex

    Решил!!! Спасибо за статью.

    add_filter( 'enlightenment_entry_meta_args', 'child_enlightenment_filter_entry_meta_args' ,15 );

    function child_enlightenment_filter_entry_meta_args( $args ) {

    Ответить
    • Eugene Kopich

      Отлично, но тема интересная, я скоро переведу на русский ту статью, что я вам скидывал на facebook, для будущих поколений)
      P.S. хотя нашел уже на русском переводы статьи, и не один)

      Ответить

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

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