WordPress. API настроек (опций). Часть 1
API опций было добавлено в версии 2.7 и позволяет создавать как сами настройки, так и поля форм для сохранения значений в базу данных. Можно добавлять как отдельные настройки, так и целые секции настроек. И размещать элементы формы как на уже существующих страницах (Общие, Чтение, Медиафайлы), так и создавать под настройки новые страницы в админке.
Функции для работы с опциями
- Функция add_option() добавляет настройку (название и значение опции) в базу данных. Ничего не делает, если опция уже существует. Можно записать массив — перед записью в БД он будет сериализован.
- Функция update_option() обновляет значение опции (настройки) в базе данных. Ожидает не экранированную строку. Может быть использована для того, чтобы добавлять новые опции, вместо add_options() .
- Функция get_option() получает значение указанной настройки (опции). Функция получает данные из кэша, если это возможно, если нет, то данные берутся из базы данных. Возвращает значение опции или false , если указанной опции не существует.
- Функция delete_option() удаляет настройку (запись из таблицы wp_options базы данных). Возвращает true — если настройка была найдена и удалена и false — в противном случае.
Примеры использования функций:
Добавляем поле опции
Для добавления поля формы на страницу опций предназначена функция add_settings_field() . WordPress сам позаботится о сохранении опции в базу данных после отправки данных формы. Добавляемая опция должна быть сначала зарегистрирована функцией register_setting() , иначе она не будет сохраняться и обновляться.
Функции обратного вызова может быть передан в качестве аргумента массив. В этом случае массив должен быть описан при вызове add_settings_field() :
Создаем секцию настроек
Функция add_settings_section() позволяет создать новый блок (секцию), в котором выводятся поля настроек. Т.е. в этот блок затем добавляются опции с помощью add_settings_field() . Такие секции можно увидеть на страницах настроек WordPress или плагинов.
Давайте создадим три настройки и объединим их в секцию. Секцию разместим на странице «Настройки • Общие» и зададим для нее заголовок и описание.
Посмотрим, как можно сохранить массив в таблице wp_options базы данных. Создадим одну настройку и три поля, которые пользователь может заполнить. И сохраним все три значения в одной опции.
Источник
add_settings_field() WP 2.7
Создает поле опции для указанной секции (указанного блока настроек).
Эта функция используется в комплексе с другими функциями API настроек, которые упрощают создание страницы настроек плагина.
Для этой функции уже должны быть известны параметры $page (страница плагина или админки) и $section (блок на странице, где поле будет выводиться).
Важно: каждая опция должна быть зарегистрирована функцией register_setting(), а эта функция отвечает только за добавление поля опции (HTML кода) на страницу в нужную секцию.
Функция обратного вызова (параметр $callback) должна выводить поля формы input и заполнять их существующими в базе данных данными.
Сохранение данных происходит автоматически.
Атрибут name тега input должен быть равен параметру $option_name в register_setting() , а id тега input равен параметру $id . Результат должен сразу выводиться на экран (echo). Значение атрибута value обычно заполняется функцией get_option().
Эта функция также может быть использована для добавления дополнительных полей опций в уже существующие страницы настроек WordPress, такие как: медиафайлы, чтение. Поля можно добавлять в уже существующие секции или создать свою секцию с помощью add_settings_section(), куда потом прикрепить поле опции.
Возвращает
Ничего не возвращает.
Использование
Дополнительные параметры, которые нужно передать callback функции. Например, в паре key/value мы можем передать параметр $id, который затем использовать для атрибута id поля input, чтобы по нажатию на label в итоговом выводе, фокус курсора попадал в наше поле.
- label_for — Строка. Если указать, то заголовок настройки будет обернут тегом
- class — Строка. CSS класс который нужно добавить к тегу
в котором выводиться поле опции. По умолчанию: array()
Примеры
#1. Добавим новое поле опции на главную страницу настроек WordPress (general).
myprefix должен быть уникален, например каким-то префиксом вашего плагина или темы. Также, передадим последний параметр, где укажем id и название опции для атрибутов тега: id и name:
В итоге на странице «Основное» (general) в самом конце мы получим новую полностью рабочую опцию:
Источник
Подробно про страницы настроек в WordPress
Давно уже меня просили написать пост про создание страниц настроек (с использованием нового API), но всё никак не доходили до него руки. Ну что же, вот и дошли .
Обычно, в похожих уроках, авторы любят рассматривать все функции по отдельности — в таких случаях их ну очень не удобно копировать и можно запутаться что к чему.
Я же предоставляю вам полностью готовый к использованию код — просто вставьте его в functions.php и страница настроек сразу появится у вас в админке. Ну а потом вы уже сможете отредактировать в ней поля, либо добавить свои собственные.
После вставки этого кода перейдите в Настройки > Параметры:
Несколько советов по работе с новым API настроек WordPress
В коде я оставил столько комментариев, сколько смог, но некоторые вещи всё ещё остались без внимания.
- В примере я использовал add_options_page() , которая добавляла ссылку на страницу внутри пункта меню «Настройки», но вы также можете использовать и некоторые другие функции, в результате чего страница с настройками (а точнее ссылка на неё) поменяет расположение в меню, например:
- add_menu_page() — благодаря этой функции вы сможете сделать так:
Частными случаями функции add_submenu_page() являются add_dashboard_page() (под пунктом меню «Консоль»), add_posts_page() (под «Записи»), add_media_page() (под «Медиафайлы»), add_links_page() (под «Ссылки»), add_pages_page() (под «Страницы»), add_comments_page() (под «Комментарии»), add_theme_page() (под «Внешний вид»), add_plugins_page() (под «Плагины»), add_users_page() (под «Пользователи»), add_management_page() (под «Инструменты») и конечно же add_options_page() (под «Настройки»), которую я использовал в примере.
- В примере я не стал рассматривать поле с возможностью загрузки изображения, но вы можете почитать об этом тут.
Получение настроек из базы данных
Все настройки с нашей страницы хранятся в базе данных WordPress в таблице wp_options в виде сериализованного массива. Для того, чтобы их получить, нужно сделать следующее:
Если вам что-то непонятно, пожалуйста, оставьте свой вопрос в комментариях и мы вместе разберёмся, что к чему.
Смотрите также
Недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.
Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.
Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.
Комментарии — 73
Спасибо за статью. У меня вот какой вопрос, при разработке тем одни авторы используют Theme options, другие же Theme Customizer, при этом, и первые и вторые решают с помощью них одни и те же задачи, есть вообще между ними какое то функциональное разграничение, что определяет: какой из способов более приемлем для той или иной темы?
Одно и то же это, если я правильно понял вопрос.
В попытках хоть как то разобраться в этом вопросе наткнулся на ребят активно дискутирующих на эту тему (если автор сайта не будет против ссылка на статью перелагается ): http://wordpress.stackexchange.com/questions/97929/settings-api-vs-theme-customizer
В целом я пришел к выводу, что это не совсем одно и тоже, но такое впечатление неизбежно возникает из за некоторого функционального перекрытия, в общем эта тема — бездна.
Всё, я понял суть вопроса 🙂
Options API — нужно для добавления настроек через тему или плагин.
Theme Customizer же настроек не добавляет, он позволяет просмотреть изменения уже существующих настроек «вживую» на сайте.
« Theme Customizer же настроек не добавляет », почему же? Если правильно понял то вот так можно через
можно добавить любые поля по настройке темы и ввода данных:
и да, как вы и сказали, в отличи от Theme options, Theme Customizer — позволяет тут же просмотреть изменения
Ну значит на следующей неделе пост будет про Theme Customizer 🙂
Это здорово. И в полку недоумевающих явно пребудет 🙂
А что у вас за плагин для комментирования записей в этом блоге?
На ваш взгляд лучше использовать сторонние комментарии на wordpress или стандартные тоже подойдут? Есть ли у стандартных какие-то недостатки?
Хороши и стандартные, и disqus / vk / facebook.
Спасибо за очередную полезную статью. Не-могли опубликовать пост, ли что то вроде того как добавить поле для логотипа, что-бы можно было загрузить картинку?
Источник
Полное руководство по настройке WordPress API, часть 2: секции, поля и настройки
Содержание цикла статей «Полное руководство по настройке WordPress API» :
Когда дело доходит до разработки тем и плагинов ( Themes & Plugins ) под WordPress, то разработчик сталкивается с тем, что есть много различных способов создать меню, опции и функциональность для проверки вводимых данных.
Но тонкость в том, что в действительности есть только один по-настоящему правильный способ сделать это в WordPress – он заключается в использовании Settings API (API настроек).
Данная серия статей как раз нацелена на создание полноценного гида, который бы раскрывал все преимущества использования WordPress Settings API . Таким образом, получается целостное руководство по правильной разработке тем и плагинов.
В первой статье из этого цикла, мы обзорно познакомились с Settings API и разобрались, почему это важно. В этой же статье, мы собираемся погрузиться в API и узнать, как извлечь максимальную пользу из предоставляемых им возможностей.
Мы узнаем об основных единицах WordPress – секциях ( sections ), полях ( fields ) и настройках ( settings ) – а также о том, как включить их в панель управления WordPress (Dashboard).
Секции, поля и настройки
До того, как писать какой-либо код, было бы разумно разобраться с тремя основными компонентами WordPress Settings API:
- Поля – индивидуальные опции, появляющиеся на страницах меню. Поле это минимальная единица. Поля могут быть представлены текстовыми полями (text box), радиокнопками (radio button), чекбоксами (checkbox) и так далее. Значения полей сохраняются в базе данных WordPress;
- Секции – логически сгруппированные поля. Когда вы работаете с множеством полей, то очень помогает группировка полей по общему признаку. Секции как раз её и предоставляют. Более того, если ваш продукт включает в себя много страниц настроек, то каждая секция может представлять собой ссылку на отдельную страницу или вкладку;
- Настройки – регистрируются после определения полей и секций. Настройки являются комбинацией полей и секций, которые в них входят.
Не беспокойтесь, если вы все еще не поняли что, в сущности, представляют собой перечисленные выше основные компоненты. Далее мы разберем каждую составляющую и приведем пример исходного кода, который реализует данную функциональность.
Песочница (Sandbox) для наших настроек
Чтобы начать борьбу со зверем по имени Settings API, давайте настроим стандартную тему, которая будет использоваться в этой и дальнейших статьях цикла. Весь исходный код , разумеется, будет выложен на всеобщее обозрение.
Перейдите в папку themes вашей локально установленной копии WordPress, и создайте новую пустую директорию с именем WordPress-Settings-Sandbox (sandbox по-английски – песочница, то есть это место, где безопасно можно играть с нашими настройками, отсюда и такое название).
В ней следует создать следующие файлы:
- style.css – файл стилей для нашей темы. Включает в себя мета-информацию для нашей темы. Это обязательный файл для WordPress;
- index.php – стандартный шаблон для нашей темы. Пока что оставим его пустым. Обязательный файл WordPress;
- functions.php – в этом файле мы будем производить основную часть работы. Мы будем заполнять его по мере продвижения по циклу статей.
Добавьте следующий код в файл style.css :
Далее, добавьте следующие строки в файл index.php :
Заметьте, что разметка, представленная выше, чрезвычайно проста и ее не рекомендуется использовать в качестве основы для разработки своих тем. Она создана специально для этой серии статей и предназначена для изучения Settings API.
Обновите страницу настроек темы в панели управления, и вы увидите, что появилась новая тема под названием « Sandbox ». Активируйте её.
Первые шаги в создании опций
Обратите внимание, что для индексного шаблона, представленного выше, мы определили три специфических области контента: заголовок — header , содержимое – content и подвал (футер) — footer . Используя Settings API, давайте создадим секцию « Общие », включающую в себя три поля, каждое из которых относится к одному из определенных выше контейнеров.
Но прежде, перечислим порядок наших действий. Он таков:
- Определение секции, которая будет использоваться для группировки полей;
- Добавление трех полей – по одному для каждого контейнера – в секцию, определенную выше;
- Регистрация настроек с помощью WordPress API.
Чтобы избежать громоздкого кода и убедиться, что мы учли все правила, мы будем делать все по шагам.
Создание секции
Чтобы найти нашу секцию опций « Общие », нам надо использовать функцию add_settings_section из Settings API. Согласно WordPress Codex, функция add_settings_section требует три аргумента:
- ID – уникальный идентификатор для определяемой секции. Это значение, которое будет использоваться для регистрации каждого поля внутри секции. Можете определить этот идентификатор по своему усмотрению, но я рекомендую делать имя осмысленным для удобства чтения кода;
- Title – значение, которое будет отображаться вверху административной панели WordPress, когда пользователи будут работать с этой опцией;
- Callback – имя функции, которая будет выводить содержимое страницы опций на экран. Это может быть использовано для различных целей. В простейшем случае, для предоставления набора инструкций или описаний на вашей странице опций;
- Page – это значение используется для того, чтобы сообщить WordPress, на какой странице нужно отобразить ваши опции. В следующих статьях цикла, мы будем использовать это для того, чтобы добавить опции на созданные вами страницы. А сейчас, мы добавим их на существующую страницу «Общие настройки» (General Options).
После этого, идем далее и определяем нашу секцию. Внимательно прочитайте комментарии к нижеследующему коду. Мы добавим его в наш файл functions.php .
Немного о коде, представленном в статьях: не стоит просто копировать и вставлять его. Уделите время его прочтению, посмотрите какие аргументы записаны в представленных API-функциях, а также ознакомьтесь с комментариями, чтобы убедиться, что вы все хорошо поняли:
Конечно, сейчас там не на что смотреть, но пройдите в меню « Опции » (Settings) и нажмите на вкладку « Общие » (General). Прокрутите страницу вниз и увидите новую, созданную нами секцию опций.
- Общие (General), « general »;
- Написание (Writing), « writing »;
- Чтение (Reading), « reading »;
- Обсуждение (Discussion), « discussion »;
- Медиафайлы (Media), « media »;
- Приватность (Privacy), « privacy »;
- Постоянные ссылки (Permalinks), « permalink ».
Добавление полей
Теперь, когда наша секция определена, можно добавить несколько опций. Как вы помните, в нашем индексном файле мы определили три специфических контейнера: header, content и footer .
Далее, в следующих статьях цикла опций будет больше, а пока что мы создадим переключатель видимости каждой из указанных секций.
Аналогично тому, как мы поступали перед реализацией секции, сейчас мы перечислим шаги, необходимые для создания переключателя видимости контейнеров с содержимым:
- Сначала, определим три опции – по одной для каждого контейнера;
- Затем, в качестве элемента интерфейса для переключателя мы используем чекбокс (checkbox).
Сейчас самое время познакомить вас с первым полем. Но для его добавления нам нужно рассмотреть функцию add_settings_field . Она принимает шесть параметров (четыре обязательных, два – нет):
- ID – идентификатор поля. Будет использоваться, чтобы получать и сохранять значения, полученные из темы. Рекомендуется назвать осмысленным именем для упрощения чтения кода;
- Title – название поля, которое будет отображаться на странице опций в административной панели. Оно должно быть понятным, чтобы быть легко понятым пользователями;
- Callback – имя функции, использующейся для вывода;
- Page – указывает, на какой странице нужно отобразить данную опцию. Можно добавить как на одну из имеющихся, так и на свою собственную страницу;
- Section – ссылка на секцию, которую вы создали с помощью функции add_settings_section. Это значение совпадает с ID, который вы определили при создании секции. Параметр опциональный;
- Arguments – Массив аргументов, передаваемый в функцию вызова. Это полезно, если имеется дополнительная информация, которую вы хотите включить в вывод вашего элемента интерфейса. Параметр опциональный.
Теперь, давайте определим наше первое поле. Его назначением будет, как упоминалось выше, переключение видимости контейнеров в шаблоне.
Мы вызовем функцию add_settings_field ниже функции add_settings_section внутри функции инициализации, которую мы создали выше. Выглядит это так:
Далее, определяем callback -функцию для вышеприведенной функции. Она используется для вывода чекбокса и описания в административной панели:
Обратите внимание на комментарии и не беспокойтесь, что некоторые атрибуты вам непонятны (например, вызов функции checked ). Позже, в следующих статьях, мы вернемся как к каждому элементу ввода, так и к использующимся вспомогательным функциям.
Итак, к текущему моменту ваш файл functions.php должен выглядеть так:
Обновите страницу « Общие настройки » (General Settings). Вы увидите чекбокс с меткой « Контейнер header » и с описанием рядом.
Регистрация наших настроек
Чтобы сохранить значения наших полей в базе данных, нам нужно зарегистрировать их в WordPress. Сделать это относительно просто – нужно просто использовать функцию register_setting . Она принимает три аргумента (два обязательных, один опциональный):
Option Group – имя группы опций. Это может быть как группа, предлагаемая WordPress, так и ID, который мы определили при создании собственной секции. Обязательный аргумент;
Option Name – ID регистрируемого поля. В нашем случае, мы регистрируем одно поле, но если бы мы регистрировали несколько, то потребовалось бы вызвать эту функцию для каждого поля в отдельности. Обязательный аргумент;
Callback – имя функции, которая будет вызвана перед сохранением в базу данных. Этот аргумент выходит за рамки данного цикла статей, однако ближе к концу серии мы его немного коснемся. Аргумент опциональный.Давайте зарегистрируем настройку, которую мы только что создали. Взгляните на код, представленный ниже. Добавьте его прямо после вызова функции add_settings_field в секции инициализации, которую мы определили ранее. Это один из самых простых сниппетов (отрывков кода) в статье:
Попробуйте – нажмите сначала на чекбокс, а затем на кнопку « Сохранить изменения » и увидите, как при обновлении страницы, состояние чекбокса сохранилось.
Добавление оставшихся двух опций
Нам все еще нужно добавить опции для переключения видимости контейнеров content и footer . Они будут аналогичны функциям для контейнера header .
Сначала, давайте определим поле для управления отображением контейнера content. Для этого, сначала вызовем функцию add_settings_field :
Теперь определим callback -функцию:
Далее, определим поле, для отображения контейнера footer :
Создадим callback -функцию для этого поля:
Наконец, зарегистрируем два этих новых поля в WordPress. Два вызова этих функций следует поместить ниже функции инициализации, которая была определена ранее.
Финальная версия файла functions.php должна выглядеть так:
Теперь обновите страницу « Общие настройки » (General Settings) и вы увидите три полноценно работающих чекбокса.
Использование API в теме
Какая польза от опций, если мы не можем их использовать в нашей теме или плагине? Нам нужно иметь возможность считывать значения для управления нашими опциями.
Чтобы это сделать, нам нужно использовать функцию get_option . Эта функция принимает два аргумента (один обязательный и один опциональный):
- Option ID – идентификатор поля, для которого вы пытаетесь получить значение. Аргумент обязательный;
- Default Option – значение, которое будет передано, если функция возвратит пустое значение (например, в случае, если опция не найдена в базе данных). Аргумент опциональный.
Для начала, давайте попробуем переключить видимость контейнера header. В файле index.php , созданном ранее, найдите код содержащий параметр id со значением header . Вот он:
Далее, сделаем вызов функции get_option с использованием условной конструкции if. Если условие равно true (это в случае, если опция была отмечена на странице « Основные настройки » (General Settings)), то элемент будет отображен; в противном случае – он выводиться не будет.
После этого, вновь зайдите на страницу « Общие настройки » (General Settings), и установите опцию для скрытия контейнера header и обновите страницу в браузере. Контейнер header виден не будет.
Далее, просто повторяем этот процесс для двух оставшихся контейнеров. Нам необходимо обернуть контейнеры content и footer условными конструкциями, которые будут сравнивать результат работы функции get_option .
Посетите страницу « Общие настройки » (General Settings), отметьте все три чекбокса и обновите страницу в браузере. Отображением каждого контейнера теперь можно управлять отдельно.
Далее, страницы меню
На сегодня достаточно! Мы рассмотрели все функции, требуемые для создания новых секций, полей и настроек в WordPress. Конечно, есть еще очень много всего, что нужно обсудить.
В следующей статье цикла, мы разберемся, как добавить собственные меню и страницы в панель управления WordPress.
Источник
➤ Adblock
detector