Для чего нужен functions.php?
Чем functions.php отличается от плагина?
Мифы о производительности functions.php
Произвольное меню
Включаем поддержку произвольных меню (wp_nav_menu)
Вывод произвольных меню через функцию wp_nav_menu
Функции
Интернационализация
Специальные функции интернационализации
Установка заголовков перевода
Загрузка Text Domain
Генерация POT-файла
Функции подключение файлов
add_theme_support()
Схема загрузки ядра WordPress (очередность загрузки хуков)
Порядок загрузки ядра WordPress
Файл темы functions.php в WordPress
Где находиться functions.php WordPress и примеры его использования
Файл functions.php из папки с темой WordPress — реальные примеры его использования
Произвольное меню в WP 3.0+ (wp_nav_menu)
Как добавить свое меню в шаблон wordpress
Poedit — переводим темы и плагины WordPress
Специальные функции интернационализации
Как переводить темы для WordPress
Как перевести тему для WordPress на другой язык
Для своей работы тема может использовать функции, которые располагаются в файле functions.php. Этот файл работает подобно плагину и если он присутствует в каталоге темы, то он автоматически загружается во время инициализации WordPress. Это верно как для страниц админки, так и для остальных (внешних к админке) страниц. Предлагается следующее использование для этого файла:
- Определение функций, используемых в файлах шаблонов вашей темы;
- Настройки в админке вашей темы, которые предоставляют пользователям варианты настроек цветов, стилей или других аспектов вашей темы.
Темы, поставляемые с WordPress и установленные из коробки, имеют файл functions.php, который определяет ряд функций и настроек в админке темы, поэтому вы можете использовать его в качестве модели. Файл functions.php в основном работает как плагин, раздел Кодекса Function_Reference — лучшее место, где можно получить более подробную информацию о том, как вы можете использовать этот файл.
Для чего нужен файл functions.php?
Основная цель данного файла — предоставить дополнительные функции необходимые для полноценной работы темы, а также установить некоторые параметры для ядра WordPress, например размер миниатюр, путь к файлам локализации темы, разделы для виджетов и другие.
Файл functions.php загружается при каждом запросе любой страницы в WordPress, включая запросы в панель администрирования и AJAX запросы. Это дает разработчикам темы возможность изменять любые аспекты их проекта на WordPress, а не только то, что связано с внешним видом.
Также стоит отметить, что благодаря тому, что functions.php загружается после подключения библиотек WordPress и плагинов, функции прописанные имеют более высокий приоритет и позволяют отключать ранее вызванные функции.
Если нас не устраивает как работает какая-та из стандартных функций WordPress, мы свободно можем переписать её в functions.php, после чего вызвать её на любой странице и в любом файле темы нашего сайта без каких либо дополнительных объявлений.
Вообще файл functions.php в WordPress по логике и скорости работы напоминает плагины. Хотя при этом у них есть принципиальные отличия. Плагины используются, как правило, для решения каких-то конкретных задач и применяются к любой теме вашего сайта. Плюс для работы их нужно активировать. Что касается файла шаблона functions.php, то он может содержать много разных функций и выполняется только для той темы, в которой определен. То есть при смене шаблона, все ваши текущие наработки будут отключены, а система начнет считывать информацию из другого файла функций (об этом следует помнить).
Чем functions.php отличается от плагина?
Если коротко — то ничем.
Если взглянуть на порядок загрузки ядра WordPress в файле wp-settings.php, то мы увидим что файл functions.php активной темы загружается немного позднее всех активных плагинов, но данный порядок не дает каких-либо преимуществ или недостатков. А содержание файла functions.php и файлов плагинов подключаются и выполняются идентичным образом.
Рис. 15.1 Процесс подключения functions.php
Основным отличием плагинов от functions.php является то, что плагины можно выборочно активировать через интерфейс, а файл functions.php активной темы загружается всегда. Таким образом при смене активной темы мы теряем все, что было написано в старом файле functions.php, но наши активные плагины продолжают функционировать.
Мифы о производительности functions.php
Некоторые источники утверждают, что functions.php работает быстрее чем плагины, и иногда даже советуют переместить код из файла плагина в файл functions.php для его «ускорения». Это неправда.
Как мы уже упомянули, файлы плагинов и файл functions.php подключаются и исполняются идентичным образом, и PHP код размещенный в плагине и в файле functions.php будет выполняться с абсолютно одинаковой скоростью.
Список активных плагинов в базе данных WordPress хранится в одной опции, которая будет выбираться с одинаковой скоростью, независимо от количества активных плагинов. Иными словами, количество активных плагинов не влияет на скорость работы сайта на WordPress. Влияет лишь их содержание, ровно так же как и содержание файла functions.php.
Произвольное меню
WordPress 3.0 добавлена поддержка произвольных меню (настраиваемых меню). Удобство заключается в том, что теперь можно создавать и конфигурировать меню прямо из админки, добавляя ссылки кликами по чекбоксам и меняя порядок ссылок простым перетаскиванием. В меню можно добавить ссылки на страницы, категории и отдельные посты. Можно создавать многоуровневые меню, так же в меню можно добавлять свои произвольные ссылки, о которых WordPress не знает. В общем, полная свобода действий.
Однако, чтобы такая «свобода» была доступна, нужно, скажем так, легким движением мышки, настроить вывод произвольного меню в шаблон.
Использовать такие меню будет крайне удобно, если пользоваться мультисайтовой возможностью WordPress, потому что для разных сайтов можно будет настраивать разные меню, а шаблон для них использовать один.
Заметка автора: огорчает, то что меню работает через таксономию (nav_menu) WordPress, а произвольные (внешние) ссылки, записываются в основную таблицу БД posts. Такой подход более гибкий и динамичный, однако требует постоянной генерации таких меню, поэтому такие меню создают приличную нагрузку. Такая уж концепция WordPress — удобство превыше всего, несмотря на то, что порой оно не оправдано производительностью.
Включаем поддержку произвольных меню (wp_nav_menu)
Для начала нужно зарегистрировать возможность использования произвольных меню и сами меню. Делается это в файле functions.php,с помощью функции register_nav_menu() Регистрируется одно расположение/место меню, к которому затем в админке прикрепляются меню. Чтобы зарегистрировать сразу несколько таких меню используйте register_nav_menus().
register_nav_menu( $location, $description );
Регистрируется одно расположение/место меню, к которому затем в админке прикрепляются меню.
Такое меню удобно тем, что его можно очень гибко редактировать в админ панели, добавляя в него ссылки на любые разделы и страницы сайта, а также и любые другие ссылки. Меню выводиться в шаблоне функцией wp_nav_menu().
Функция автоматически регистрирует поддержку навигационных меню для темы. т.е. используя эту функцию нет необходимости предварительно вызывать функцию: add_theme_support( ‘menus’ );
Чтобы зарегистрировать сразу несколько таких меню используйте register_nav_menus().
Функцию принято вызывать во время события after_setup_theme.
Работает на основе: register_nav_menus() Хуков нет.
Возвращает
Функция ничего не возвращает, просто регистрирует расположение меню.
Использование
<?php register_nav_menu( $location, $description ); ?>
$location(строка) (обязательный)
Идентификатор расположения меню, как слаг — литая строка.
По умолчанию: нет
$description(строка) (обязательный)
Значение по умолчанию, которое будет показываться, если в меню нет элементов.
По умолчанию: нет
Пример
Используем этот код в файле темы functions.php.
function registerNavMenu() {
register_nav_menu( ‘primary’, ‘Primary Menu’ );
}
add_action( ‘after_setup_theme’, ‘registerNavMenu’ );
После того, как меню зарегистрировано, зайдите в админку и добавьте в него элементы, а затем выведите его в шаблоне с помощью wp_nav_menu(), чтобы вывести меню в шаблоне.
Сейчас мы зарегистрировали 1 меню с идентификатором ‘primary’ с соответствующим названиям. Идентификатор нужен, чтобы использовать их в теме, для указания того места, где ,через функцию вывода wp_nav_menu(), будет выводиться созданное в админке меню. Названия зарегистрированных расположений мы увидим в админке, когда зайдем в раздел Внешний вид -> Меню(Appearance->Menus).
После того, как меню зарегистрированы, идем в админку и создаем свое меню:
- Задаем название меню (меню в шаблоне можно выводить по указанному названию, функцией wp_nav_menu()
- Создаем пункты меню. Используем левый блок: страницы ссылки, рубрики
- Выбираем где будет расположено меню.
Поддержка произвольных меню в WordPress включается для каждой темы отдельно, такой строкой в файле functions.php add_theme_support(‘menus’); Однако, в этой строчке нет необходимости, если мы регистрируем меню. В этом случаем поддержка будет включена автоматически.
Вывод произвольных меню через функцию wp_nav_menu
Меню зарегистрировано и создано, осталось добавить его в шаблон. Делается это функцией wp_nav_menu()
wp_nav_menu()
Выводит произвольное меню, созданное в панели: «внешний вид > меню» (Appearance > Menus). Какое именно меню навигации выводить (их может быть несколько), указывается в параметре theme_location. Если не указан параметр theme_location, то меню для вывода будет подбираться в следующем порядке:
- Меню, подходящее по ID, слагу или описанию переданному в параметре ‘menu’ и если в этом меню есть хоть одна ссылка (один элемент);
- иначе, первое не пустое меню;
- или, выведет значение возвращаемое функцией указанной в параметре «fallback_cb» (по умолчанию там указано функция wp_page_menu);
- если ничего не подошло, функция ничего и не выведет.
Чтобы тема поддерживала меню, нужно включить эту возможность с помощью:
add_theme_support( ‘menus’ );
Или можно зарегистрировать место для меню, с помощью register_nav_menu(), тогда поддержка меню темой включиться автоматически.
Фльтры изменения элемента меню
- nav_menu_item_args — фильтрует параметры отдельного элемента меню.
- nav_menu_css_class — фильтрует css классы (class атрибут) отдельного <li> элемента меню.
- nav_menu_item_id — фильтрует ID атрибут отдельного <li> элемента меню.
- nav_menu_link_attributes — фильтрует атрибуты <a> элемента меню: title, target, rel, href.
- nav_menu_item_title — фильтрует текст анкора ссылки элемента меню.
- walker_nav_menu_start_el — фильтрует HTML код начала отдельного элемента меню. Начало означает незакрытый li тег: <li><a></a>
Хуки из функции:
wp_nav_menu_(menu->slug)_items
wp_nav_menu_container_allowedtags
Возвращает
Функция выводит на экран html код меню.
Использование
<?php wp_nav_menu( $args ); ?>
wp_nav_menu( array(
‘theme_location’ => »,
‘menu’ => »,
‘container’ => ‘div’,
‘container_class’ => »,
‘container_id’ => »,
‘menu_class’ => ‘menu’,
‘menu_id’ => »,
‘echo’ => true,
‘fallback_cb’ => ‘wp_page_menu’,
‘before’ => »,
‘after’ => »,
‘link_before’ => »,
‘link_after’ => »,
‘items_wrap’ => ‘<ul id=»%1$s» class=»%2$s»>%3$s</ul>’,
‘depth’ => 0,
‘walker’ => »,
) );
Аргументы параметра $args
theme_location(строка)
Идентификатор расположение меню в шаблоне. Идентификатор, указывается при регистрации меню функцией register_nav_menu().
По умолчанию: »
menu(строка)
Меню которое нужно вывести. Соответствие: id, слаг или название меню.
По умолчанию: «»
container(строка)
Чем оборачивать ul тег. Допустимо: div или nav. Если не нужно оборачивать ничем, то пишем false (container => false).
По умолчанию: div
container_class(строка)
Значение атрибута class у контейнера меню.
По умолчанию: menu-{menu slug}-container
container_id(строка)
Значение атрибута id у контейнера меню.
По умолчанию: »
menu_class(строка)
Значение атрибута class у тега ul.
По умолчанию: menu
menu_id(строка)
Значение атрибута id у тега ul.
По умолчанию: слаг меню
echo(логическое)
Выводить на экран (true) или возвратить для обработки (false).
По умолчанию: true
fallback_cb(строка)
Функция для обработки вывода, если никакое меню не найдено.
Передает все аргументы $args указанной тут функции.
Установите ‘__return_empty_string’ чтобы ничего не выводилось, если меню нет.
По умолчанию: wp_page_menu
before(строка)
Текст перед тегом <a> в меню.
По умолчанию: »
after(строка)
Текст после каждого тега </a> в меню.
По умолчанию: »
link_before(строка)
Текст перед анкором каждой ссылки в меню.
По умолчанию: »
link_after(строка)
Текст после анкора каждой ссылки в меню.
По умолчанию: »
items_wrap(строка)
Нужно ли оборачивать элементы в тег ul. Если нужно, указывается шаблон обертки.
По умолчанию: ‘<ul id=»%1$s» class=»%2$s»>%3$s</ul>’
depth(число)
Сколько уровень вложенных друг в друга ссылок показывать. 0 — все уровни.
walker(объект)
Класса, который будет использоваться для построения меню. Нужно указывать объект, а не строку, например new My_Menu_Walker(). По умолчанию: Walker_Nav_Menu(). Как использовать смотрите ниже…
По умолчанию: Walker_Nav_Menu
item_spacing(строка)
Оставлять или нет переносы строк в HTML коде меню. Может быть: preserve или discard
По умолчанию: ‘preserve’
Вывод меню
<?php
$args = array(
‘theme_location’ => ‘primary’
‘container’ => ‘nav’,
‘container_class’ => »,
‘container_id’ => ‘main-menu’,
‘menu_class’ => ‘horizontal-navigation’,
‘menu_id’ => »,
‘echo’ => true,
‘fallback_cb’ => ‘wp_page_menu’,
‘before’ => »,
‘after’ => »,
‘link_before’ => »,
‘link_after’ => »,
‘depth’ => 0,
‘walker’ => »,
);
wp_nav_menu($args);
?>
Функции
| get_nav_menu_locations() | Получает массив зарегистрированных областей меню (расположений меню) и ID меню прикрепленных к каждой области. |
| has_nav_menu() | Проверяет зарегистрировано ли указанное меню навигации. Условный тег. |
| register_nav_menu() | Регистрируется одно расположение/место меню, к которому затем в админке прикрепляются меню. |
| register_nav_menus() | Регистрируется сразу несколько расположений меню, к которым затем прикрепляются меню. |
| unregister_nav_menu() | Удаляет, ранее зарегистрированное, меню навигации. |
| wp_get_nav_menu_items() | Получает элементы меню навигации в виде массива, который затем можно обработать. |
| wp_get_nav_menu_object() | Получает объект меню WordPress. Возвращает только объект самого меню, без элементв в нем. |
| wp_get_nav_menus() | Возвращает массив (объектов) всех зарегистрированных меню. |
| wp_nav_menu() | Выводит произвольное меню, созданное в панели: «внешний вид > меню» (Appearance > Menus). |
Интернационализация
Интернационализация — это процесс настройки программного обеспечения под локализацию; локализация — это процесс перевода на различные языки отображаемого программой текста. WordPress используется по всему миру, и интернационализация и локализация встроены в его структуру, в том числе, и локализация плагинов.
На языке WordPress подготовка исходных файлов означает, что разработчик шаблона или плагинов использует в коде специальные функции интернационализации, чтобы сделать свой продукт доступным для перевода на другие языки.
Специальные функции интернационализации
| Функция | Описание |
| __() | Переводит указанный текст, используя файл перевода и возвращает его для обработки. |
| _e() | Переводит указанный текст, используя файл перевода и выводит его на экран. |
| _n() | Выбирает строку, которая будет использована для перевода единственного или множественного числа переданного в функцию (1 комментарий, 2 комментария). Функция локализации. |
| _x() | Переводит указанный текст, на основе указанного контекста. Использует файл перевода. |
| _ex() | Функция _ex() является полным аналогом функции _x(), с единственным исключением, что _x() — возвращает результат, а _ex() выводит его на экран. |
| date_i18n() | Получает локализованную дату (переведенную на текущий язык) из переданного штампа времени unix. Локализация PHP функции date(). |
| esc_attr__() | Переводит с использованием функции esc_attr(). |
| esc_attr_e() | Выводит переведенный текст, прежде очищенный функцией esc_attr(). |
| esc_html__() | Переводит строку заменяя в ней спецсимволы на HTML сущности. Возвращает текст, которой можно отображать в HTML как HTML код. |
| esc_html_e() | Переводит строку и заменяет в ней спецсимволы на HTML сущности. Выводит на экран текст, которой можно отображать в HTML как HTML код. |
| get_locale() | Устанавливает глобальную переменную $locale и получает текущую локаль (индекс языка сайта). По умолчанию ‘en_US’. |
| get_user_locale() | Получает локаль (язык перевода) текущего или указанного пользователя. |
| is_locale_switched() | Проверяет была ли переключена локаль (язык перевода), была ли использована функция switch_to_locale(). |
| load_child_theme_textdomain() | Загружает файл перевода дочерней темы (.mo) в память, для дальнейшей работы с ним. |
| load_plugin_textdomain() | Загружает строку для перевода плагина. |
| load_textdomain() | Подключает домен и .mo файл в данные локализации. |
| load_theme_textdomain() | Загружает файл перевода темы (.mo) в память, для дальнейшей работы с ним. |
| switch_to_locale() | Позволяет программно переключить язык сайта. |
| translate() | Получает перевод указанного текста. |
| unload_textdomain() | Выгружает (удаляет, отменяет) подключенный файл перевода. |
Установка заголовков перевода
Первый шаг к тому, чтобы сделать тему переводимой, будет заключаться в добавлении заголовков перевода в заголовках плагина.
-
- Text Domain используется для обозначения всего текста, принадлежащего теме. Это уникальный идентификатор, который обеспечивает WordPress возможность различать все загруженные переводы. Это позволяет сохранять компактность файлов и обеспечивает лучшее взаимодействие с уже существующими инструментами WordPress. должен совпадать со slug темы. Например, если ваша тема представляет собой директорию step-by-step-development-theme то Text Domain должен быть step-by-step-development-theme.
- Domain Path это папка, в которой WordPress будет искать файлы перевода .mo. По умолчанию, WordPress ищет файлы переводов в корневой папке темы. Однако размещение файла перевода в корневой папке может дезорганизовать структуру темы.
Если вы хотите хранить файлы перевода в другой папке, например: /languages, необходимо сообщить об этом WordPress, используя заголовок Domain Path.
Отредактируем style.css
/*
Theme Name: Step By Step Development Theme
Theme URI: https://github.com/SolomashenkoRoman/step-by-step-development-theme
Author: the romansolomashenko
Author URI: https://www.linkedin.com/in/solomashenkoroman/
Description: Step by step development of the theme.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: step-by-step-development-theme
Domain Path: /languages/
……
*/
Загрузка Text Domain
Загружает файл перевода темы (.mo) в память, для дальнейшей работы с ним.
Файл .mo должен находится в корневой директории темы. Он будет загружен в виде строки для указанного идентификатора $domain.
Файл перевода .mo должен иметь точно такое же название как и текущая локализация (указывается в wp-config.php), например, ru_RU.mo.
Следует вызывать во время хука after_setup_theme
Используется в: load_child_theme_textdomain(). Работает на основе: load_textdomain()
Хуки из функции:
theme_locale
Возвращает
Логический. true — если файл перевода был загружен, false — если не удалось получить.
Использование
load_theme_textdomain( $domain, $path );
$domain(строка) (обязательный)
Уникальный идентификатор по которому позднее в функциях перевода: __() _e() можно будет обратиться именно к этой строке перевода.
$path(строка)
Путь до директории в которой расположен .mo файл (без оканчивающего слэша). По умолчанию указывается путь до каталога темы: get_template_directory().
По умолчанию: false
Пример
define(«STEPBYSTEP_THEME_TEXTDOMAIN», ‘step-by-step-development-theme’);
/**
* Загрузка Text Domain
*/
function themeLocalization(){
load_theme_textdomain(STEPBYSTEP_THEME_TEXTDOMAIN, get_template_directory() . ‘/languages/’);
}
add_action(‘after_setup_theme’, ‘themeLocalization’);
Генерация POT-файла
Первый этап — сгенерировать .pot для вашего плагина или темы. Можно скачать пустой шаблон POT файла https://github.com/fxbenard/Blank-WordPress-Pot в папку languages темы
Вместе с шаблоном POT файла идет файлик How-to-use-a-pot-file.txt в нем описано что нужно сделать чтобы создать файл перевода:
- Открыть программу Poedit
- Теперь нам нужно создать POT файл на основе пустого шаблона POT который мы скачали для этого делаем следующее Файл->Создать из POT файла
- Выбираем шаблон POT файла
- Вводи свое имя, адрес электронной почты, язык и страну (en_US) в форме настройки.
Каталог->Свойства
Теперь сохраним свой файл en_US.po в папке languages
Создадим POT файл для русской локализации ru_RU ru_RU.po. Все аналогично файлу en_US.po
Пример
/**
* Включаем поддержку произвольных меню
*/
function registerNavMenu() {
register_nav_menu( ‘primary’, __(‘Primary Menu’, STEPBYSTEP_THEME_TEXTDOMAIN) );
}
add_action( ‘after_setup_theme’, ‘registerNavMenu’, 100 );
Функции подключения файлов
| comments_template() | Подгружает указанный файл шаблона комментариев для показа комментариев на старице записи. По умолчанию загружает файл: /comments.php из папки темы. |
| get_footer() | Подключает файл footer.php из шаблона (темы). Если указано имя в параметре, то будет подключен файл: footer-{name}.php из шаблона темы. |
| get_header() | Подключает файл шаблона header.php (шапку). Если передан параметр $name, то будет подключен файл header-{name}.php. |
| get_search_form() | Подключает форму поиска, файл темы searchform.php. Если такого файла в шаблоне темы нет, то будет использован дефолтный код для формы поиска. |
| get_sidebar() | Подключает файл шаблона sidebar.php (сайдбар). Если передан параметр $name, то будет подключен файл sidebar-{name}.php. |
| get_stylesheet_uri() | Получает готовую ссылку (URL) на файл стилей style.css текущей темы. |
| get_template_part() | Предназначена для поиска и подключения разных частей темы. Похожа на PHP функцию include(), только тут не нужно указывать путь до темы. |
| is_page_template() | Проверяет используется ли для вывода страницы отдельный файл шаблона. Возвращает true/false. |
| load_template() | Подключает указанный файл в PHP, с помощью require_once. WordPress-обёртка для PHP функции require_once. |
| locate_template() | Находит наиболее подходящий серверный путь к указанному файлу шаблона. При поиске учитывается дочерняя тема. В параметрах можно указать, чтобы файл сразу подключался в PHP. |
| get_stylesheet_directory() | Получает абсолютный путь до каталога, где находится текущий файл стилей родительской или дочерней темы. Не содержит закрывающего слэша (/). |
| get_stylesheet_directory_uri() | Получает URL текущей темы, не содержит слэша на конце. Учитывает дочернюю тему. Учитывает SSL. |
| get_template() | Получает название директории текущей темы, без слэшей на концах. Название каталога темы почти всегда равно названию темы. |
| get_template_directory() | Получает полный путь от корня сайта до текущей темы (родительской, не дочерней). Не содержит слэш на конце. |
| get_template_directory_uri() | Получает URL текущей темы. Учитывает SSL. Не учитывает наличие дочерней темы. Не содержит закрывающий слэш. |
| get_template() | Получает название директории текущей темы, без слэшей на концах. Название каталога темы почти всегда равно названию темы. |
| get_template_directory() | Получает полный путь от корня сайта до текущей темы (родительской, не дочерней). Не содержит слэш на конце. |
| get_template_directory_uri() | Получает URL текущей темы. Учитывает SSL. Не учитывает наличие дочерней темы. Не содержит закрывающий слэш. |
add_theme_support()
Позволяет темам или плагинам регистрировать поддержку новых возможностей в WordPress (поддержка миниатюр, форматов записей и т.д.) Если функция вызывается из темы, то она должна находится в файле functions.php. Также, её можно вызвать из плагина, подключив к событию (хуку): after_setup_theme.
Всегда вызывайте функцию во время события after_setup_theme или напрямую в файле functions.php. Не следует подключать функцию к событию init, так как это хук может оказаться поздним.
Хуков нет.
add_theme_support( $feature, $formats );
$feature(строка) (обязательный)
Название добавляемой возможности.
Список всех новых возможностей:
- post-formats
- post-thumbnails
- custom-background
- custom-header
- automatic-feed-links
- html5
- title-tag
- custom-logo (с WP 4.5)
- customize-selective-refresh-widgets (с WP 4.5)
- starter-content (с WP 4.7)
- admin-bar
Следующие возможности нужны только для чтения и должны быть использованы в функции current_theme_supports():
- widgets — используйте register_sidebar() или register_sidebars() взамен.
- menus — используйте register_nav_menu() или register_nav_menus() взамен.
- editor-style — используйте add_editor_style() взамен.
По умолчанию: нет
$formats(массив)
Дополнительные параметры. Для каждой возможности свои. У форматов постов тут указываем форматы, у миниатюр типы постов, где они будут работать и т.д. .
По умолчанию: нет
Новые возможности
post-formats
Позволяет указывать формат посту. Функция была добавлена в версии 3.1. Чтобы указать определенные форматы используйте второй аргумент функции:
add_theme_support( ‘post-formats’, array( ‘aside’, ‘gallery’ ) );
Чтобы проверить пост на формат quote, используйте такой код в файлах single.php, page.php:
if ( has_post_format( ‘quote’ ) ) {
echo ‘Это quote.’;
}
post-thumbnails
Позволяет устанавливать миниатюру посту. Доступна с версии 2.9. Вы можете передать второй аргумент функции в виде массива, в котором указать для каких типов постов разрешить миниатюры:
add_theme_support( ‘post-thumbnails’ );
add_theme_support( ‘post-thumbnails’, array( ‘post’ ) ); // Только для post
add_theme_support( ‘post-thumbnails’, array( ‘page’ ) ); // Только для page
add_theme_support( ‘post-thumbnails’, array( ‘post’, ‘movie’ ) ); // Для post и movie типов
Эту возможность нужно добавлять до хука init. Это значит, что функция должна быть расположена в файле темы functions.php или через хук after_setup_theme. Для произвольных типов записей также можно выводить блок миниатюр смотрите register_post_type().
Чтобы вывести миниатюру в файле темы (index.php или single.php и т.д.) используем функцию the_post_thumbnail():
the_post_thumbnail();
Чтобы проверить, если ли у поста миниатюра, перед тем как её выводить, используем has_post_thumbnail():
if ( has_post_thumbnail() ) {
the_post_thumbnail();
}
custom-background
Добавляет возможность изменять фон из админки. Доступна с версии 3.4.
add_theme_support( ‘custom-background’ );
Также, можно указать параметры во втором аргументе:
$defaults = array(
‘default-color’ => »,
‘default-image’ => »,
‘wp-head-callback’ => ‘_custom_background_cb’,
‘admin-head-callback’ => »,
‘admin-preview-callback’ => »
);
add_theme_support( ‘custom-background’, $defaults );
Получим в head части сайта:
<style type=»text/css» id=»custom-background-css»>
body.custom-background { background-color: #bdd96e; }
</style>
Совместимость с ранними версиями
Чтобы произвольный фон был совместим в ранними версиями (ниже 3.4), можно использовать такое условие:
global $wp_version;
if ( version_compare( $wp_version, ‘3.4’, ‘>=’ ) )
add_theme_support( ‘custom-background’ );
else
add_custom_background( $args );
custom-header
С версии 3.4, можно изменять изображения в шапке из админки, используя:
add_theme_support( ‘custom-header’ );
Также, можно указать дополнительные параметры:
$defaults = array(
‘default-image’ => »,
‘random-default’ => false,
‘width’ => 0,
‘height’ => 0,
‘flex-height’ => false,
‘flex-width’ => false,
‘default-text-color’ => », // вызывается функций get_header_textcolor()
‘header-text’ => true,
‘uploads’ => true,
‘wp-head-callback’ => »,
‘admin-head-callback’ => »,
‘admin-preview-callback’ => »,
‘video’ => false, // с 4.7
‘video-active-callback’ => ‘is_front_page’, // с 4.7
);
add_theme_support( ‘custom-header’, $defaults );
Видео в заголовке (шапке WordPress)
C WP 4.7 в настройках шапки можно разрешить устанавливать видео, которое будет использовано также как и картника — в целях декорации. Поэтому оно будет проигрываться автоматически, будет зациклено и будет без звука. Такую возможность хорошо использовать в комбинации с картинкой, чтобы сначала загружалась картинка, а затем, если видео поддерживается подгружалось оно.
Поддержка видео включается так:
add_theme_support( ‘custom-header’, array(
‘video’ => true,
) );
При активации этой возможности в кастомайзере (настройках темы) появится блок где можно загрузить и установить.
Все функции для вывода картинки и видео заголовка:
- get_header_image — Получает УРЛ картинки шапки (заголовка). Для вывода на экран есть обертка header_image().
- get_header_image_tag() — Получает <img> тег картинки заголовка. Добавляет туда атрибуты srcset и srcset. Для вывода на экран есть обертка the_header_image_tag().
- has_header_video() – Проверяет было ли установлено видео в кастомайзере.
- is_header_video_active() – Проверяет должно ли показываться видео для текущей страницы запроса во фронте.
- get_header_video_url() – Получает URL видео для шапки. Может быть локальной или внешней ссылкой на видео.
- the_header_video_url() – Выводит URL видео для шапки.
- has_custom_header() – Проверяет установлена ли картинка для шапки темы, или установлено ли видео и доступно для показа на текущей странице запроса.
- get_custom_header_markup() – Получает HTML код для отображения картинки заголовка (не включает видео).
- the_custom_header_markup() – Выводит HTML код для отображения картинки заголовка и подключает JS код для обработки видео заголовка, если оно доступно для текущего запроса.
Примеры
Для начала в header.php где находится картинка шапки у нас должен быть такой код, чтобы нижеследующие настройки работали:
<img src=»<?php header_image(); ?>» height=»<?php echo get_custom_header()->height; ?>» width=»<?php echo get_custom_header()->width; ?>» alt=»» />
#1. Установим картинку для шапки размером: 980px на 60px:
$args = array(
‘width’ => 980,
‘height’ => 60,
‘default-image’ => get_template_directory_uri() . ‘/images/header.jpg’,
);
add_theme_support( ‘custom-header’, $args );
#2. Установим картинку по умолчанию и дадим возможность изменять её пользователям (‘uploads’=> true):
$args = array(
‘width’ => 980,
‘height’ => 60,
‘default-image’ => get_template_directory_uri() . ‘/images/header.jpg’,
‘uploads’ => true,
);
add_theme_support( ‘custom-header’, $args );
#3. Дадим возможность пользователям изменять размеры картинки (‘flex-width’, ‘flex-height’):
$args = array(
‘flex-width’ => true,
‘width’ => 980,
‘flex-height’ => true,
‘height’ => 200,
‘default-image’ => get_template_directory_uri() . ‘/images/header.jpg’,
);
add_theme_support( ‘custom-header’, $args );
automatic-feed-links
Эта возможность добавляет ссылки на RSS фиды постов и комментариев в head часть HTML документа. Работает с версии 3.0. Нужно использовать вместо устарелой функции automatic_feed_links().
add_theme_support( ‘automatic-feed-links’ );
html5
Включает поддержку html5 разметки для списка комментариев, формы комментариев, формы поиска, галереи и т.д. Где нужно включить разметку указывается во втором параметре:
add_theme_support( ‘html5’, array( ‘comment-list’, ‘comment-form’, ‘search-form’, ‘gallery’, ‘caption’ ) );
Если второй параметр оставить пустым, то будут использован следующий массив: array( ‘comment-list’, ‘comment-form’, ‘search-form’ ).
C версии 3.9 WordPress использует элементы: <figure> (галерея) и <figcaption> (подпись) для кода галереи и для подписи картинок.
title-tag
С версии 4.1. Эта функция позволит плагинам и темам изменять метатег <title>. Эта возможность будет использоваться вместо wp_title().
add_theme_support(‘title-tag’);
Если активировать эту опцию для темы, то в теме не нужно устанавливать метатег <title><?php wp_title() ?></title> — он будет подключен автоматически через хук wp_head.
custom-logo (с WP 4.5)
Добавляет возможность загрузить картинку логотипа в настройках темы в админке.
custom-logo
add_theme_support(‘custom-logo’);
После установки такого лого, его можно получить и вывести в теме с помощью функции: get_custom_logo() или the_custom_logo().
Чтобы проверить наличие такого логотипа используйте has_custom_logo().
customize-selective-refresh-widgets (с WP 4.5)
Включает поддержку «Selective Refresh» (выборочное обновление) для виджетов в кастомайзере. Что такое «Selective Refresh» смотрите в этом демо ролике и читайте (англ.) тут и тут.
add_theme_support( ‘customize-selective-refresh-widgets’ );
starter-content (с WP 4.7)
Расширяет начальный контент (контент который устанавливается, при установке WordPress или темы). По умолчанию в WP есть свой начальный контент, но его можно дополнить указав в этой возможности все данные контента. Какие данные можно указать и в каком формате это делать, смотрите в коде функции get_theme_starter_content()
Шаблон использования:
add_theme_support( ‘starter-content’, array(
‘options’ => », // опции сайта
‘theme_mods’ => », // опции темы
‘widgets’ => », // данные виждетов
‘nav_menus’ => », // данные меню
‘attachments’ => », // данные вложений
‘posts’ => », // массив массивов: ID => array(‘post_type’ => », ‘post_title’ => », ‘post_excerpt’ => », ‘post_name’ => », ‘post_content’ => », ‘menu_order’ => », ‘comment_status’ => », ‘thumbnail’ => », ‘template’ => »)
) );
admin-bar
Эта возможность включена по умолчанию и отключается по-другому. Но через get_theme_support( ‘admin-bar’ ); WP получает название колбек функции _admin_bar_bump_cb(), она выводит css стили для отступа вверху html для админ бара.
Чтобы убрать, отключить этот отступ используйте такой код:
add_theme_support( ‘admin-bar’, array( ‘callback’=>’__return_false’ ) );


admin
— отредактировал style.css:
Text Domain: wpcodinghomework
Domain Path: /languages/
— скачал шаблон POT в /languages/ и сгенерировал файлы в программе PoEdit
— добавил функции локализации в function.php (в том числе для главного меню)
— добавил новые возможности в function.php