Еще один вопрос, который следует иметь в виду: «Кто будет менять эти настройки?» Если пользователь знаком с PHP и WordPress, можно ожидать что у него не будет проблем с вложением Google Analytics в код, но вы не должны требовать этого от графического дизайнера, не говоря уже о писателе, который даже не должен ничего знать о HTML и CSS.
После того, как вы собрали список функций темы, которые вы хотите контролировать на странице настроек, вы почти готовы перейти к реализации. Прежде чем вы перейдете и создадите страницу настроек, вы можете сэкономить время, убедившись, что уже не существует функции WordPress для настройки, которую вы собираетесь реализовать. Виджеты, пользовательские меню, пользовательские фоны и изображения заголовков - все это полезные инструменты для настройки вашей темы с гораздо меньшим количеством работы, чем требуется для создания собственных настроек. Тем не менее, это темы для другого учебника.
Элементы главной страницы в редакторе будут представлены в виде списка элементов, к которым новые могут быть добавлены с помощью JavaScript и jQuery.
Создание страницы настроек начинается с создания функции, которая настраивает меню и подключает его к действию admin_menu . Это сообщает WordPress о том, чтобы вызвать вашу функцию, когда нужно будет создать меню, чтобы все было сделано в нужное время. Добавьте этот код в файл functions.php вашей темы:
Function setup_theme_admin_menus() {
// We will write the function contents very soon.
}
// This tells WordPress to call the function named "setup_theme_admin_menus"
// when it"s time to create the menu pages.
add_action("admin_menu", "setup_theme_admin_menus");
Теперь мы добавим код для создания страниц настроек внутри только что созданной функции.
При создании страницы настроек вы можете либо добавить страницу в качестве подменю в одну из существующих групп настроек, либо создать собственное меню верхнего уровня.
Если вы решите добавить страницу меню в качестве подменю в одну из групп WordPress, вы можете использовать следующие значения в качестве параметра $parent_slug:
Группа Appearance выглядит хорошим кандидатом для размещения нашей страницы настроек. Попробуем ее и создадим нашу первую страницу настроек. Вот обновленная версия нашей функции настройки меню:
Function setup_theme_admin_menus() {
add_submenu_page("themes.php",
"Front Page Elements", "Front Page", "manage_options",
"front-page-elements", "theme_front_page_settings");
}
Для этого нам еще нужно создать функцию theme_front_page_settings . Вот она в самой простой форме:
Нам также необходимо проверить, что у пользователя есть права, необходимые для редактирования страницы настроек. Для этого добавьте следующий код в начале функции страницы настроек:
// Check that the user is allowed to update options
if (!current_user_can("manage_options")) {
wp_die("You do not have sufficient permissions to access this page.");
}
Теперь, если пользователь, которому не разрешено управлять параметрами, попадает на страницу настроек, он не увидит ничего, кроме сообщения «У вас недостаточно прав для доступа к этой странице».
Если вашей теме нужны несколько страниц настроек, это может смутить пользователя, когда придется искать их, разбросанных по всей структуре меню. В этом случае создание собственной группы настроек облегчает пользователю темы поиск всех страниц меню для темы.
Function setup_theme_admin_menus() {
add_menu_page("Theme settings", "Example theme", "manage_options",
"tut_theme_settings", "theme_settings_page");
add_submenu_page("tut_theme_settings",
"Front Page Elements", "Front Page", "manage_options",
"front-page-elements", "theme_front_page_settings");
}
// We also need to add the handler function for the top level menu
function theme_settings_page() {
echo "Settings page";
}
Если вы проверите код и обновите панель администратора WordPress, вы увидите, что ваша новая группа меню появится в нижней части списка меню:
Но пока что-то не совсем корректно. Щелчок по элементу верхнего меню не приведет вас к меню «Главная страница», а к странице меню «Пример темы». Это не согласуется с тем, как функционируют другие меню WordPress, поэтому давайте сделаем еще одну вещь: изменив атрибут $menu_slug в вызове add_submenu_page на то же значение, что и в меню верхнего уровня, мы можем связать два меню, чтобы выбор верхнего меню выбирал меню главной страницы:
Function setup_theme_admin_menus() {
add_menu_page("Theme settings", "Example theme", "manage_options",
"tut_theme_settings", "theme_settings_page");
add_submenu_page("tut_theme_settings",
"Front Page Elements", "Front Page", "manage_options",
"tut_theme_settings", "theme_front_page_settings");
}
function theme_settings_page() {
}
В этом уроке нам нужно поле для определения того, сколько элементов должно быть указано в одной строке, и список для определения фактических элементов. Чтобы начать с более легкого, давайте создадим текстовое поле для количества элементов в одной строке. Отредактируйте функцию страницы настроек:
Featured post:
Settings saved
. Этим мы покажем серверу, что работаем с PHP.
Создаем секциюТеперь нам нужно добавить свои настройки. Делается это в 2 захода. Напрягли мозги. Напряжемся раз: добавляем секцию настроек.
В созданный нами ранее файл functions.php добавим такой код:
Add_action("customize_register", function($customizer){
$customizer->add_section("example_section_one",
array("title" => "Мои настройки",
"description" => "Пример секции",
"priority" => 11,));
});
Мы создали хук и привязали к нему функцию. Метод add_section() как раз и добавляет секцию настроек. Он принимает 2 параметра:
$args — массив аргументов
title — как секция будет называться
description — описание секции (необязательно)
Добавляем настройку в секциюДобавление происходит в 2 этапа. Сначала создаем сами настройки, а затем контрол для нее, чтобы отобразить в секции.
Для добавления настроек
напишем такой код в functions.php прямо после метода add_section(), но в внутри хука customize_register:
$customizer->add_setting("example_textbox",
array("default" => "Сайт сайт"));
Метод add_setting() принимает два параметра:
$id — уникальный идентификатор
$args — массив аргументов
В массиве $args может быть несколько позиций, а именно:
default — значение настройки по-умолчанию
type — тип настройки
capability — права пользователя, необходимые для изменения данного параметра. Т.е. разные параметры могут видеть разные группы пользователей. Круто! (необязательно)
theme_supports — указывает на то, что текущая тема должна поддерживать описанную в параметре функцию (необязательно)
transport — как изменение настройки будет отображаться в окне предпросмотра. Обновление страницы или AJAX. По умолчанию страница обновляется при каждом обновлении настройки, но если вам интересно могу рассказать, как реализовать это на AJAX, без перезагрузки страницы. Пишите в комментах свои пожелания.
sanitize_callback — имя функции для фильтрации входных данных, в БД
sanitize_js_callback — имя функции для фильтрации выходных данных, из БД
Теперь добавим контрол к настройкам
. Ниже добавим такой код:
$customizer->add_control("example_textbox",
array("label" => "Настройка текста",
"section" => "example_section_one",
"type" => "text",));
Вот теперь мы можем увидеть нашу настройку.
// картинку
Метод add_control() принимает два параметра:
$id — уникальный идентификатор
$args — массив аргументов
В массиве $args может быть несколько позиций, а именно:
label — название настройки
description — описание
section — секцию, в которую будет помещен контрол и настройка
type — тип контрола (по-умолчанию: text)
choices — для типа с переключателями флажками, определяет список значений на выбор
priority — какой по счету будет располагаться секция или ее приоритет (по-умолчанию 10)
Но мы не вывели настройку в теме. Давайте займемся этим.
Выводим настройки в темеДля того, чтобы отобразить настройки в теме надо добавить его идентификатор в нужном месте. Сделать это легко, достаточно добавить конструкцию:
Функция get_theme_mod() принимает два аргумента^
$name — имя настройки, которую нужно получить
$default — значение по-умолчанию. Выведется, если настройки не существует
Другие типы контроловCheackBox (Флажок)
Позволяет включить или отключить, что либо.
$customizer->add_control("hide_text",
array("type" => "checkbox",
"label" => "Скрыть текст",
"section" => "example_section_one",));
В теме выводится так:
Теперь, если вы не выбрали флажок, то этот текст не выведется. Полезно, если нужно скрыть. что нибудь.
Radio (Группа переключателей)
Позволяет выбрать, какой либо 1 параметр из списка.
$customizer->add_setting("radio
",
array("default" => "item_1"));
$customizer->add_control("radio
",
array("type" => "radio",
"label" => "Пример переключателей",
"section" => "example_section_one",
"choices" => array("item_1" => "item_1",
"item_2" => "item_2",
"item_3" => "item_3",),));
Select (Список)
Выпадающий список.
$customizer->add_setting("select",
array("default" => "Вордпресса"));
$customizer->add_control("select",
array("type" => "select",
"label" => "Кто мы?",
"section" => "example_section_one",
"choices" => array("Человеки" => "Человеки",
"Стахановцы" => "Стахановцы",
"Крутые ребята" => "Крутые ребята",
"НЛО" => "НЛО",),));
Выпадающий список страниц
Создает выпадающий список всех страниц сайта. Страницы генерируются самим WordPress.
$customizer->add_setting("page-setting",
array("sanitize_callback" => "example_sanitize_integer"));
$customizer->add_control("page-setting",
array("type" => "dropdown-pages",
"label" => "Выберите страницу:",
"section" => "example_section_one",));
Палитра
Позволяет добавить палитру выбора цветов. К примеру, для заднего фона.
$customizer->add_setting("color-setting",
array("default" => "#000000",
"sanitize_callback" => "sanitize_hex_color",));
$customizer->add_control(new WP_Customize_Color_Control($customizer,
"color-setting",
array("label" => "Настройка цвета",
"section" => "example_section_one",
"settings" => "color-setting",)));
Позволяет загружать файлы через стандартный загрузчик WP. Работает через класс WP_Customize_Upload_Control. Будьте внимательны.
$customizer->add_setting("file-upload");
$customizer->add_control(new WP_Customize_Upload_Control($customizer,
"file-upload",
array("label" => "Загрузка файла",
"section" => "example_section_one",
"settings" => "file-upload")));
Тоже самое, что загрузка файлов, только ставятся ограничения на разрешения файлов. Принмаются только картинки. Удобно. если надо грузить только изображения. К примеру, для заднего фона. Работает по той же схеме, что пример выше, только используется класс WP_Customize_Image_Control.
$wp_customize->add_setting("img-upload");
$wp_customize->add_control(new WP_Customize_Image_Control($wp_customize,
"img-upload",
array("label" => "Загрузка изображения",
"section" => "example_section_one",
"settings" => "img-upload")));
Это еще не всеЕсли вы думаете, что на этом возможности встроенных настроек ограничиваются, то вы ошибаетесь. В них много чего интересного: добавление собственных настроек, обновление страницы через AJAX. Можете покопаться сами или пишите в комментариях, если хотите продолжения.
Плюсы и минусыА теперь подведем итоги и рассмотрим подводные камни и преимущества данного метода.
Плюсы:- Настройки встроены в ядро WordPress. Это значит, что при переносе сайта или его обновлении на новую версию у нас сразу будут настройки без скачки обновлений фрейморков и несовместимости
- Очень легко добавить. Достаточно базовых знаний по WP и PHP, чтобы добавить настройки в тему. Гораздо проще, чем подключать сторонние решения
- Добавление своих типов настроек. Можно расширить функционал. Есть такая возможность, что очень радует.
- Изменения появляются сразу в окне предпросмотра.
Минусы:- Нет поддержки визуального редактора для текста. Это серьезный минус для сложных проектов.
- Недостаточно типов настроек. Очень много чего нет, а хотелось бы. К примеру, тот же слайдер с неограниченным количеством слайдов. Отчасти решается возможностью добавить свой контрол. Но это лишние телодвижения.
- Нет импорта/экспорта. Если вы захотите переустановить тему. то все настройки придется заново вбивать вручную! Что крайне неудобно.
- Вы ограничены в свободе размещения блоков. За простоту надо платить. Вы не можете разместить блок с предупреждением или информацией где вздумается, все в рамках заданного формата. Для кого-то неважно, для других критично. Каждый реашет сам.
ЗаключениеЧто касается моего мнения, то я считаю, что Theme Customizer пока сыроват. Да. у него большой потенциал и я уверен в будущем мы увидим много расширений и улучшений для него. Но сейчас разрабатывать сложные проекты на нем не получится.
Если вы делаете простенькую тему или тренируетесь, то обратите внимание на эту «фишку» WP. Если же вы уже серьезно работаете с каким либо и думаете, стоит, переходит или нет, то лучше не стоит. Пока, не стоит. Но определенно стоит посмотреть, что это за «зверь». Ведь потенциал у него большой.
Но, как говорится, каждый решает сам по своему опыту и сложности проектов. На этом я с вами прощаюсь до следующей статьи. Всего вам доброго. И да прибудет с вами терпение в нелегком изучении WordPress.
Создание собственной темы для WordPress является отличным способом придать вашему блогу или иному сайту, основанному на WordPress, индивидуальный вид. Однако даже самая привлекательная и красивая тема не будет идеально подходящей, если вам приходится лезть «под капот» и редактировать ее PHP и HTML-код всякий раз, когда требуется несколько видоизменить ее аспекты. Особенно, если это приходится делать не вам, а вашему клиенту. К счастью, создание страницы настроек для вашей темы в WordPress является не таким уж сложным действием, и после прочтения данного руководства вы сможете создать собственную страницу настроек без какого-либо труда.
Шаг 1. Выясняем, какие настройки нам необходимы.Все начинается с потребностей: чтобы создать четкую и полезную страницу настроек, вы должны определить то, что требуется изменить, оставив все остальное неизменным. Каждый новый параметр, который вы добавляете к администраторскому меню, увеличивает сложность пользовательского интерфейса – вы рискуете сделать тему трудной в использовании. Вот почему лучше быть осторожным и тщательно подбирать такие опции, которые будут часто изменяться, отбросив настройки, изменяемые однократно, что может быть легко сделано путем корректировки соответствующих файлов темы.
Еще один вопрос, который нужно иметь в виду: «Кто будет изменять данные настройки?» Если пользователь знаком с WordPress и PHP, то разумно было бы ожидать, что он сможет самостоятельно внедрить код Google Analytics в тему, но вы не должны требовать этого от графического дизайнера, не говоря уже об авторах, которым не нужно знать ни HTML, ни CSS.
Общие идеи для компонентов, которые нужно вынести в настройки темы, включают в себя:
- Код отслеживания Google Analytics
- Число сайдбаров и их расположение (слева, справа, может даже вверху и внизу)
- Ширина страниц
- Контент в футере
- Опции для возможностей, которые являются специфичными для темы, такие как, к примеру, форматы тизеров.
Как только вы собрали список возможностей темы, которыми вы хотели бы управлять посредством страницы настроек, вы практически готовы начать их реализацию. Прежде чем пойти дальше и создать свою страницу настроек, вы можете сохранить свое время, убедившись в том, что в WordPress уже нет такой функции, доступной для изменения. Виджеты, произвольные меню, произвольные бэкграунды и изображения для хэдера – все это полезные инструменты для того, чтобы сделать вашу тему настраиваемой, при этом гораздо меньшими усилиями, которые обычно требуются ля создания ваших собственных настроек. Правда, все эти компоненты – тема для другого руководства.
Настройки, создаваемые в данном руководствеДля данного учебного руководства я взял главную страницу, состоящую из сетки с различным количеством популярных записей, которые могут быть выбраны, отредактированы и переупорядочены администратором с помощью произвольной страницы настроек.
В редакторе элементы главной страницы будут представляться в виде списка, к которому можно добавлять новые пункты с помощью Javascript и Jquery.
Мне нравится иметь предварительный просмотр страницы администратора в консоли WordPress, когда я пишу HTML, поэтому я обычно начинаю с того, что привязываю страницу настроек к WordPress, и затем только перехожу к разработке контента страницы. Именно поэтому нашим следующим шагом будет создание пустой страницы настроек и подцепление ее к WordPress.
Шаг 2. Подцепление страницы настроек к WordPress.Создание страницы настроек начинается с написания функции, которая устанавливает меню и подцепляет его к действию admin_menu. Это говорит WordPress о том, что нужно вызвать функцию при создании меню, чтобы все было завершено в соответствующее время. Добавьте следующий код к файлу functions.php вашей темы:
Function setup_theme_admin_menus() {
// Мы напишем контент функции очень скоро.
}
// Она говорит WP, что нужно вызвать функцию "setup_theme_admin_menus"
// когда нужно будет создать страницы меню.
add_action("admin_menu", "setup_theme_admin_menus");
Теперь мы поместим код для создания страницы настроек в функцию, которую мы только что написали:
При создании страницы настроек у вас есть выбор – либо добавлять страницу в виде подменю к одной из существующих групп настроек, либо создавать свое собственное меню верхнего уровня.
Добавление подменю производится с помощью функции add_submenu_page:
- $parent_slug – уникальный идентификатор для меню верхнего уровня, к которому будет добавлено подменю.
- $page_title заголовок добавляемой страницы.
- $menu_title заголовок, отображаемый в меню (зачастую короткая версия $page_title)
- $capability – минимальные права доступа, требуемые пользователю, чтобы получить доступ к данному меню.
- $menu_slug – уникальный идентификатор для создаваемого меню.
- $function – название функции, которая вызывается для обработки (и представления) данной страницы меню.
Если вы хотите добавить страницу меню в качестве подменю к уже существующей группе WordPress, вы можете использовать следующие значения в качестве параметра $parent_slug:
- Dashboard: index.php
- Posts: edit.php
- Media: upload.php
- Links: link-manager.php
- Pages: edit.php?post_type=page
- Comments: edit-comments.php
- Appearance: themes.php
- Plugins: plugins.php
- Users: users.php
- Tools: tools.php
- Settings: options-general.php
Группа Appearance является хорошим кандидатом для размещения нашей страницы настроек. Давайте остановимся на ней, и попробуем создать нашу первую страницу настроек. Вот обновленная версия нашей функции установки меню:
Function setup_theme_admin_menus() {
add_submenu_page("themes.php",
"Front Page Elements", "Front Page", "manage_options",
"front-page-elements", "theme_front_page_settings");
}
Нам по-прежнему надо создать функцию theme_front_page_settings для работы с настройками. Вот самая простая ее форма:
Function theme_front_page_settings() {
echo "Hello, world!";
}
Вот как это будет выглядеть в действии:
Нам также нужно проверить, имеет ли пользователь права, требуемые для редактирования страницы настроек. Чтобы сделать это, добавим следующий код в самом начале функции страницы настроек:
// проверяем, что пользователь может обновлять настройки
if (!current_user_can("manage_options")) {
wp_die("You do not have sufficient permissions to access this page.");
}
Теперь, если пользователь, которому нельзя управлять страницей настроек, зайдет на страницу настроек, он увидит обычное сообщение: «У вас нет достаточных прав, чтобы получить доступ к данной странице».
Если для вашей темы требуются многочисленные страницы настроек, это может запутать пользователя, поскольку ему придется разыскивать их в меню. В таком случае создание вашей собственной группы настроек значительно упростит поиск страниц в меню.
Чтобы добавить свою собственную группу настроек, вы должны создать страницу меню верхнего уровня, и соединить с ней страницы подменю. Вот новая версия нашей функции для создания меню. Функция add_menu_page создает меню верхнего уровня по аналогии с add_submenu_page, за исключением лишь того, что ей не нужен параметр $parent_slug.
Function setup_theme_admin_menus() {
add_menu_page("Theme settings", "Example theme", "manage_options",
"tut_theme_settings", "theme_settings_page");
add_submenu_page("tut_theme_settings",
"Front Page Elements", "Front Page", "manage_options",
"front-page-elements", "theme_front_page_settings");
}
// нам нужно добавить функцию обработки меню верхнего уровня
function theme_settings_page() {
echo "Settings page";
}
Если вы протестируете код и обновите консоль WordPress, то вы увидите новую группу меню, представленную в самом низу списка меню.
Однако пока это выглядит не совсем верно. Щелчок по верхнему элементу меню приводит вас не к странице меню Front Page, а к странице Example theme. Это не совпадает с тем, как работают остальные меню WordPress, потому давайте сделаем еще одну вещь: изменив атрибут $menu_slug в вызове add_submenu_page на то же самое значение, что и в меню верхнего уровня, мы можем связать два меню так, чтобы выбор верхнего пункта приводил к появлению меню Front Page.
Function setup_theme_admin_menus() {
add_menu_page("Theme settings", "Example theme", "manage_options",
"tut_theme_settings", "theme_settings_page");
add_submenu_page("tut_theme_settings",
"Front Page Elements", "Front Page", "manage_options",
"tut_theme_settings", "theme_front_page_settings");
}
function theme_settings_page() {
}
Выглядит уже лучше. Если вы все еще хотите улучшить представление своей группы меню, вы можете воспользоваться двумя дополнительными полями в функции add_menu_page. Просто добавьте значения после названия функции в вызове метода:
- $icon_url – определяет URL иконки для меню верхнего уровня.
- $position – определяет позицию вашей группы меню в списке меню. Чем больше значение, тем ниже позиция в меню.
Шаг 3. Создаем HTML-форму для страниц настроек.Теперь, когда мы создали страницу настроек, и она отобразилась в боковом меню, пора начать добавлять к ней некоторый контент. Давайте вернемся к списку настроек и спроектируем страницу для редактирования их.
В данном руководстве нам нужно поле для определения, сколько элементов должно быть выведено в одной строке, и список для определения существующих элементов. Начнем с более простого: давайте создадим текстовое поле для количества элементов в одной строке. Отредактируем функцию для страницы настроек:
Function theme_front_page_settings() {
?>
Front page elements