Меню

WordPress добавить поле в настройки



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