Полное руководство по настройке WordPress API, часть 2: секции, поля и настройки

Содержание цикла статей «Полное руководство по настройке WordPress API»:

  1. Полное руководство по настройке WordPress API, часть 1: введение
  2. Полное руководство по настройке WordPress API, часть 2: секции, поля и настройки
  3. Полное руководство по настройке WordPress API, часть 3: все о создании меню
  4. Полное руководство по настройке WordPress API, часть 4: опции темы
  5. Полное руководство по настройке WordPress API, часть 5: закладочная навигация
  6. Полное руководство по настройке WordPress API, часть 6: страницы меню
  7. Полное руководство по настройке WordPress API, часть 7: валидация, очистка и элементы ввода
  8. Полное руководство по настройке WordPress API, часть 8: валидация, очистка и элементы ввода

Когда дело доходит до разработки тем и плагинов (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:

/* 

Theme Name: Песочница для создаваемых настроек WordPress
Theme URI: Ваш URI-адрес
Description: Простейшая тема для демонстрации WordPress Settings API. 
Author: Ваше имя
Author URI: Адрес вашего веб-сайта 
Version: 0.1 
 
License: Текст файл лицензии, по которой распространяется данный продукт

Copyright 2013 Ваше имя (ваше email-адрес) 
 
  This program is free software; you can redistribute it and/or modify 
  it under the terms of the GNU General Public License, version 2, as  
  published by the Free Software Foundation. 
 
  This program is distributed in the hope that it will be useful, 
  but WITHOUT ANY WARRANTY; without even the implied warranty of 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
  GNU General Public License for more details. 
 
  You should have received a copy of the GNU General Public License 
  along with this program; if not, write to the Free Software 
  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA 

*/

Далее, добавьте следующие строки в файл index.php:

<!DOCTYPE html>  
<html> 
    <head>      
        <title>Полноценный гид по Settings API | Тема Sandbox</title>  
    </head> 
 
    <body>        
        <div id="header">  
            <h1>Заголовок Sandbox</h1>  
        </div><!-- /#header -->  
  
        <div id="content">  
            <p>Здесь содержимое темы.</p>  
        </div><!-- /#content -->  
  
        <div id="footer">  
            <p>&copy; <?php echo date('Y'); ?> Все права защищены.</p>  
        </div><!-- /#footer -->
    </body>  
</html>

Заметьте, что разметка, представленная выше, чрезвычайно проста и ее не рекомендуется использовать в качестве основы для разработки своих тем. Она создана специально для этой серии статей и предназначена для изучения Settings API.

Обновите страницу настроек темы в панели управления, и вы увидите, что появилась новая тема под названием «Sandbox». Активируйте её.

«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-функциях, а также ознакомьтесь с комментариями, чтобы убедиться, что вы все хорошо поняли:

<?php  
  
/* ---------------------------------------------------------------- 
 * Регистрация настроек 
 * ----------------------------------------------------------------
*/  
  
/* Инициализация страницы опций темы, регистрация секций, полей и настроек.
 * Эта функция регистрируется с помощью хука  admin_init. 
*/
function sandbox_initialize_theme_options() {  
    //Сначала мы регистрируем секцию. Это необходимо, так как объявляемые далее опции будут принадлежать именно к этой секции.
    add_settings_section(  
        'general_settings_section',           // ID, который будет использоваться для идентификации этой секции и по которому мы будем регистрировать опции
        'Опции Sandbox',                      // Заголовок, который будет отображаться на странице административной панели
        'sandbox_general_options_callback',   // Вызов, который используется для отображения описания секции  
        'general'                             // Страница, на которую будет добавлена секция  
    );  
} // Конец функции sandbox_initialize_theme_options

add_action('admin_init', 'sandbox_initialize_theme_options');  
  
/* ----------------------------------------------------------------
 * Callback-функции для секций
 * ----------------------------------------------------------------
*/   
  
/* 
 * Эта функция предоставляет простое описание страницы "Общие настройки".  
 * Она вызывается из функции sandbox_initialize_theme_options и передается в нее как параметр
*/  

function sandbox_general_options_callback() {  
    echo '<p>Выберите, какие секции вы хотите показывать на странице.</p>';  
} // Конец функции sandbox_general_options_callback  
   
?>

Конечно, сейчас там не на что смотреть, но пройдите в меню «Опции» (Settings) и нажмите на вкладку «Общие» (General). Прокрутите страницу вниз и увидите новую, созданную нами секцию опций.

секция опций

Вы можете добавить эту секцию на любую страницу в меню «Настройки» (Settings). В примере выше, мы передали параметр general последним в функцию add_settings_section, но при желании, вы можете вставить туда заголовок любой другой страницы. Вот список страниц в меню «Настройки» (Settings) и соответствующее им уникальное имя:

  • Общие (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 внутри функции инициализации, которую мы создали выше. Выглядит это так:

// Далее, мы создадим поле для переключения видимости контейнеров в шаблоне  
    add_settings_field(   
        'show_header',                      // Идентификатор, используемый для идентификации поля внутри темы  
        'Контейнер header',                 // Метка слева от элемента интерфейса
        'sandbox_toggle_header_callback',   // Имя функции, ответственной за вывод элемента интерфейса  
        'general',                          // Страница, на которую будет выведена опция  
        'general_settings_section',         // Имя секции, которой принадлежит поле
        array(                              // Массив-аргументов, передаваемый callback-функции. В нашем случае просто описание.  
            'Активируйте эту опцию, чтобы отобразить контейнер header.'  
        )  
    );

Далее, определяем callback-функцию для вышеприведенной функции. Она используется для вывода чекбокса и описания в административной панели:

/* ------------------------------------------------------------------------ * 
 * callback-функции для полей
 * ------------------------------------------------------------------------
*/

/** 
 * Эта функция выводит элемент интерфейса для изменения видимости контейнера header. 
 *  
 * Она получает массив аргументов, в котором первым идет описание,
 * которое будет отображено после чекбокса. 
 */  
function sandbox_toggle_header_callback($args) {  
      
    // Заметьте, что идентификатор и имя атрибута элемента должны совпадать с указанными в функции add_settings_field  
    $html = '<input type="checkbox" id="show_header" name="show_header" value="1" ' . checked(1, get_option('show_header'), false) . '/>';  
      
    // Берем первый элемент массива и добавляем его к метке чекбокса  
    $html .= '<label for="show_header"> '  . $args[0] . '</label>';  
      
    echo $html;  
      
} // конец функции sandbox_toggle_header_callback

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

Итак, к текущему моменту ваш файл functions.php должен выглядеть так:

<?php  
  
/* ---------------------------------------------------------------- 
 * Регистрация настроек 
 * ----------------------------------------------------------------
*/  
  
/* Инициализация страницы опций темы, регистрация секций, полей и настроек.
 * Эта функция регистрируется с помощью хука admin_init. 
*/
function sandbox_initialize_theme_options() {  
    //Сначала мы регистрируем секцию. Это необходимо, так как объявляемые далее опции будут принадлежать именно к этой секции.
    add_settings_section(  
        'general_settings_section',           // ID, который будет использоваться для идентификации этой секции и по которому мы будем регистрировать опции
        'Опции Sandbox',                      // Заголовок, который будет отображаться на странице административной панели
        'sandbox_general_options_callback',   // Вызов, который используется для отображения описания секции  
        'general'                             // Страница, на которую будет добавлена секция  
    );

    // Далее, мы создадим поле для переключения видимости контейнеров в шаблоне  
    add_settings_field(   
        'show_header',                      // Идентификатор, используемый для идентификации поля внутри темы  
        'Контейнер header',                 // Метка слева от элемента интерфейса
        'sandbox_toggle_header_callback',   // Имя функции, ответственной за вывод элемента интерфейса  
        'general',                          // Страница, на которую будет выведена опция  
        'general_settings_section',         // Имя секции, которой принадлежит поле
        array(                              // Массив-аргументов, передаваемый callback-функции. В нашем случае просто описание.  
            'Активируйте эту опцию, чтобы отобразить контейнер header.'  
        )  
    );  

} // Конец функции sandbox_initialize_theme_options

add_action('admin_init', 'sandbox_initialize_theme_options');  
  
/* ----------------------------------------------------------------
 * Callback-функции для секций
 * ----------------------------------------------------------------
*/   
  
/* 
 * Эта функция предоставляет простое описание страницы «Общие настройки».  
 * Она вызывается из функции sandbox_initialize_theme_options и передается в нее как параметр
*/
function sandbox_general_options_callback() {  
    echo '<p>Выберите, какие секции вы хотите показывать на странице.</p>';  
} // Конец функции sandbox_general_options_callback  

/* ------------------------------------------------------------------------ * 
 * Callback-функции для полей
 * ------------------------------------------------------------------------
*/

/* 
 * Эта функция выводит элемент интерфейса для изменения видимости контейнера header.
 * Она получает массив аргументов, в котором первым идет описание, которое будет отображено после чекбокса. 
*/
function sandbox_toggle_header_callback($args) {  
      
    //Идентификатор и имя атрибута элемента должны совпадать с указанными в функции add_settings_field  
    $html = '<input type="checkbox" id="show_header" name="show_header" value="1" ' . checked(1, get_option('show_header'), false) . '/>';  
      
    // Берем первый элемент массива и добавляем его к метке чекбокса
    $html .= '<label for="show_header"> ' . $args[0] . '</label>';  
      
    echo $html;  
      
} // Конец функции sandbox_toggle_header_callback

?>

Обновите страницу «Общие настройки» (General Settings). Вы увидите чекбокс с меткой «Контейнер header» и с описанием рядом.

чекбокс с меткой

К сожалению, это значение пока не сохраняется в базе данных.

Регистрация наших настроек

Чтобы сохранить значения наших полей в базе данных, нам нужно зарегистрировать их в WordPress. Сделать это относительно просто – нужно просто использовать функцию register_setting. Она принимает три аргумента (два обязательных, один опциональный):

Option Group – имя группы опций. Это может быть как группа, предлагаемая WordPress, так и ID, который мы определили при создании собственной секции. Обязательный аргумент;
Option Name – ID регистрируемого поля. В нашем случае, мы регистрируем одно поле, но если бы мы регистрировали несколько, то потребовалось бы вызвать эту функцию для каждого поля в отдельности. Обязательный аргумент;
Callback – имя функции, которая будет вызвана перед сохранением в базу данных. Этот аргумент выходит за рамки данного цикла статей, однако ближе к концу серии мы его немного коснемся. Аргумент опциональный.

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

// Регистрируем поля в WordPress  
    register_setting(  
        'general',  
        'show_header'  
    );

Попробуйте – нажмите сначала на чекбокс, а затем на кнопку «Сохранить изменения» и увидите, как при обновлении страницы, состояние чекбокса сохранилось.

состояние чекбокса

Достаточно легко, верно?

Добавление оставшихся двух опций

Нам все еще нужно добавить опции для переключения видимости контейнеров content и footer. Они будут аналогичны функциям для контейнера header.

Сначала, давайте определим поле для управления отображением контейнера content. Для этого, сначала вызовем функцию add_settings_field:

add_settings_field(  
        'show_content',  
        'Контейнер content',  
        'sandbox_toggle_content_callback',  
        'general',  
        'general_settings_section',  
        array(  
            'Активируйте эту опцию, чтобы отобразить контейнер content.'  
        )  
    );

Теперь определим callback-функцию:

function sandbox_toggle_content_callback($args) {  
  
    $html = '<input type="checkbox" id="show_content" name="show_content" value="1" ' . checked(1, get_option('show_content'), false) . '/>';   
    $html .= '<label for="show_content"> '  . $args[0] . '</label>';   
      
    echo $html;  
      
} // Конец функции sandbox_toggle_content_callback

Далее, определим поле, для отображения контейнера footer:

add_settings_field(   
        'show_footer',                        
        'Контейнер footer',                 
        'sandbox_toggle_footer_callback',     
        'general',                            
        'general_settings_section',           
        array(                                
            'Активируйте эту опцию, чтобы отобразить контейнер footer.'  
        )  
    );

Создадим callback-функцию для этого поля:

function sandbox_toggle_footer_callback($args) {  
      
    $html = '<input type="checkbox" id="show_footer" name="show_footer" value="1" ' . checked(1, get_option('show_footer'), false) . '/>';   
    $html .= '<label for="show_footer"> '  . $args[0] . '</label>';   
      
    echo $html;  
      
} // Конец функции sandbox_toggle_footer_callback

Наконец, зарегистрируем два этих новых поля в WordPress. Два вызова этих функций следует поместить ниже функции инициализации, которая была определена ранее.

register_setting(  
        'general',  
        'show_content'  
    );  
  
    register_setting(  
        'general',  
        'show_footer'  
    );

Финальная версия файла functions.php должна выглядеть так:

<?php  
  
/* ---------------------------------------------------------------- 
 * Регистрация настроек 
 * ----------------------------------------------------------------
*/  
  
/* Инициализация страницы опций темы, регистрация секций, полей и настроек.
 * Эта функция регистрируется с помощью хука admin_init. 
*/
function sandbox_initialize_theme_options() {  
    //Сначала мы регистрируем секцию. Это необходимо, так как объявляемые далее опции будут принадлежать именно к этой секции.
    add_settings_section(  
        'general_settings_section',           // ID, который будет использоваться для идентификации этой секции и по которому мы будем регистрировать опции
        'Опции Sandbox',                      // Заголовок, который будет отображаться на странице административной панели
        'sandbox_general_options_callback',   // Вызов, который используется для отображения описания секции  
        'general'                             // Страница, на которую будет добавлена секция  
    );

    // Далее, мы создадим поле для переключения видимости контейнеров в шаблоне  
    add_settings_field(   
        'show_header',                      // Идентификатор, используемый для идентификации поля внутри темы  
        'Контейнер header',                 // Метка слева от элемента интерфейса
        'sandbox_toggle_header_callback',   // Имя функции, ответственной за вывод элемента интерфейса  
        'general',                          // Страница, на которую будет выведена опция  
        'general_settings_section',         // Имя секции, которой принадлежит поле
        array(                              // Массив-аргументов, передаваемый callback-функции. В нашем случае просто описание.  
            'Активируйте эту опцию, чтобы отобразить контейнер header.'  
        )  
    );

    add_settings_field(  
        'show_content',  
        'Контейнер content',  
        'sandbox_toggle_content_callback',  
        'general',  
        'general_settings_section',  
        array(  
            'Активируйте эту опцию, чтобы отобразить контейнер content.'  
        )  
    );

    add_settings_field(   
        'show_footer',                        
        'Контейнер Footer',                 
        'sandbox_toggle_footer_callback',     
        'general',                            
        'general_settings_section',           
        array(                                
            'Активируйте эту опцию, чтобы отобразить контейнер footer.'  
        )  
    );

    // Регистрируем поля в WordPress  
    register_setting(  
        'general',  
        'show_header'  
    );

    register_setting(  
        'general',  
        'show_content'  
    );  
  
    register_setting(  
        'general',  
        'show_footer'  
    );  

} // Конец функции sandbox_initialize_theme_options

add_action('admin_init', 'sandbox_initialize_theme_options');  
  
/* ----------------------------------------------------------------
 * Callback-функции для секций
 * ----------------------------------------------------------------
*/   
  
/* 
 * Эта функция предоставляет простое описание страницы «Общие настройки».  
 * Она вызывается из функции sandbox_initialize_theme_options и передается в нее как параметр
*/
function sandbox_general_options_callback() {  
    echo '<p>Выберите, какие секции вы хотите показывать на странице.</p>';  
} // Конец функции sandbox_general_options_callback  

/* ------------------------------------------------------------------------ * 
 * Callback-функции для полей
 * ------------------------------------------------------------------------
*/

/* 
 * Эта функция выводит элемент интерфейса для изменения видимости контейнера header.
 * Она получает массив аргументов, в котором первым идет описание, которое будет отображено после чекбокса. 
*/
function sandbox_toggle_header_callback($args) {  
      
    //Идентификатор и имя атрибута элемента должны совпадать с указанными в функции add_settings_field  
    $html = '<input type="checkbox" id="show_header" name="show_header" value="1" ' . checked(1, get_option('show_header'), false) . '/>';  
      
    // Берем первый элемент массива и добавляем его к метке чекбокса
    $html .= '<label for="show_header"> ' . $args[0] . '</label>';  
      
    echo $html;  
      
} // Конец функции sandbox_toggle_header_callback

function sandbox_toggle_content_callback($args) {  
  
    $html = '<input type="checkbox" id="show_content" name="show_content" value="1" ' . checked(1, get_option('show_content'), false) . '/>';   
    $html .= '<label for="show_content"> '  . $args[0] . '</label>';   
      
    echo $html;  
      
} // Конец функции sandbox_toggle_content_callback  

function sandbox_toggle_footer_callback($args) {  
      
    $html = '<input type="checkbox" id="show_footer" name="show_footer" value="1" ' . checked(1, get_option('show_footer'), false) . '/>';   
    $html .= '<label for="show_footer"> '  . $args[0] . '</label>';   
      
    echo $html;  
      
} // Конец функции sandbox_toggle_footer_callback 

?>

Теперь обновите страницу «Общие настройки» (General Settings) и вы увидите три полноценно работающих чекбокса.

«Общие настройки»

Использование API в теме

Какая польза от опций, если мы не можем их использовать в нашей теме или плагине? Нам нужно иметь возможность считывать значения для управления нашими опциями.

Чтобы это сделать, нам нужно использовать функцию get_option. Эта функция принимает два аргумента (один обязательный и один опциональный):

  • Option ID – идентификатор поля, для которого вы пытаетесь получить значение. Аргумент обязательный;
  • Default Option – значение, которое будет передано, если функция возвратит пустое значение (например, в случае, если опция не найдена в базе данных). Аргумент опциональный.

Для начала, давайте попробуем переключить видимость контейнера header. В файле index.php, созданном ранее, найдите код содержащий параметр id со значением header. Вот он:

<div id="header">  
    <h1>Заголовок Sandbox</h1>  
</div><!-- /#header -->

Далее, сделаем вызов функции get_option с использованием условной конструкции if. Если условие равно true (это в случае, если опция была отмечена на странице «Основные настройки» (General Settings)), то элемент будет отображен; в противном случае – он выводиться не будет.

<?php if(get_option('show_header')) { ?>  
            <div id="header">  
                <h1>Заголовок Sandbox</h1>  
            </div><!-- /#header -->  
        <?php } // конец конструкции if ?>

После этого, вновь зайдите на страницу «Общие настройки» (General Settings), и установите опцию для скрытия контейнера header и обновите страницу в браузере. Контейнер header виден не будет.

Далее, просто повторяем этот процесс для двух оставшихся контейнеров. Нам необходимо обернуть контейнеры content и footer условными конструкциями, которые будут сравнивать результат работы функции get_option.

Взгляните:

<?php if(get_option('show_content')) { ?>  
            <div id="content">  
                <p>Здесь содержимое темы.</p>  
            </div><!-- /#content -->  
        <?php } // Конец конструкции if ?>  

        <?php if(get_option('show_footer')) { ?>  
            <div id="footer">  
                <p>&copy; <?php echo date('Y'); ?> Все права защищены.</p>  
            </div><!-- /#footer -->  
        <?php } // Конец конструкции if ?>

Посетите страницу «Общие настройки» (General Settings), отметьте все три чекбокса и обновите страницу в браузере. Отображением каждого контейнера теперь можно управлять отдельно.

Далее, страницы меню

На сегодня достаточно! Мы рассмотрели все функции, требуемые для создания новых секций, полей и настроек в WordPress. Конечно, есть еще очень много всего, что нужно обсудить.

В следующей статье цикла, мы разберемся, как добавить собственные меню и страницы в панель управления WordPress.

Перевод статьи «The Complete Guide To The WordPress Settings API, Part 2: Sections, Fields, and Settings» был подготовлен дружной командой проекта Сайтостроение от А до Я.