Своя страница настроек (опции) для темы WordPress
В этой статье я расскажу как создать свою собственную страницу настроек для темы WordPress.
При создании своей темы или модернизации существующей бывает необходимо иметь возможность менять часть кода шаблона. И желательно, чтобы это можно было делать прямо из панели администратора.
Например вам нужно время от времени менять текст в определенной части вашего шаблона, пусть это будет рекламный баннер. И чтобы каждый раз не исправлять файлы темы можно эту опцию вынести в настройки. Тогда вы будете менять содержимое определенного поля в админке WordPress и эти данные будут автоматически вставляться в нужном вам месте шаблона.
Как подключить свою страницу настроек к теме WordPress
Чтобы ваша тема использовала индивидуальную страницу настроек добавьте следующий код в файл functions.php вашей темы:
/* Подключаем страницу настроек темы */ get_template_part('theme-options');
Затем нужно создать файл theme-options.php в корне вашей темы. Это и будет страница настроек вашего шаблона Вордресс.
Пример страницы настроек
Ниже приведу пример моей страницы настроек, в которой есть два поля, значения из которых вставляются в секции <HEAD>
и перед закрывающим тегом </BODY>
вашего шаблона соответственно. Вы можете взять ее за образец и исправить (дополнить) на свое усмотрение:
<?php $options_page = 'theme-options.php'; /* * Функция, добавляющая страницу в пункт меню Настройки */ function theme_options() { global $options_page; add_options_page( 'Параметры темы', 'Параметры темы', 'manage_options', $options_page, 'theme_options_page'); } add_action('admin_menu', 'theme_options'); /** * Возвратная функция (Callback) */ function theme_options_page(){ global $options_page; ?><div class="wrap"> <h2>Дополнительные параметры шаблона</h2> <form method="post" enctype="multipart/form-data" action="options.php"> <?php settings_fields('theme_options'); do_settings_sections($option_page); ?> <p class="submit"> <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" /> </p> </form> </div><?php } /* * Регистрируем настройки * Мои настройки будут храниться в базе под названием theme_options (это также видно в предыдущей функции) */ function theme_option_settings() { global $options_page; register_setting( 'theme_options', 'theme_options', 'theme_validate_settings' ); // Добавляем секцию add_settings_section( 'theme_section_1', 'Текстовые поля ввода', '', $options_page ); // Создадим textarea_1 в первой секции $theme_field_params = array( 'type' => 'textarea', 'id' => 'my_textarea_head', 'desc' => 'Эти данные будут вставлены перед закрывающим тегом </HEAD>.' ); add_settings_field( 'my_textarea_field_head', 'Перед закрывающим тегом </HEAD>', 'theme_option_display_settings', $options_page, 'theme_section_1', $theme_field_params ); // Создадим textarea_2 в первой секции $theme_field_params = array( 'type' => 'textarea', 'id' => 'my_textarea_body', 'desc' => 'Эти данные будут вставлены перед закрывающим тегом </BODY>.' ); add_settings_field( 'my_textarea_field_body', 'Перед закрывающим тегом </BODY>', 'theme_option_display_settings', $options_page, 'theme_section_1', $theme_field_params ); } add_action( 'admin_init', 'theme_option_settings' ); /* * Функция отображения полей ввода * Здесь задаётся HTML и PHP, выводящий поля */ function theme_option_display_settings($args) { extract( $args ); $option_name = 'theme_options'; $o = get_option( $option_name ); switch ( $type ) { case 'textarea': $o[$id] = esc_attr( stripslashes($o[$id]) ); echo "<textarea class='code large-text' cols='50' rows='10' type='text' id='$id' name='" . $option_name . "[$id]'>$o[$id]</textarea>"; echo ($desc != '') ? "<br /><span class='description'>$desc</span>" : ""; break; } } /* * Функция проверки правильности вводимых полей */ function theme_validate_settings($input) { foreach($input as $k => $v) { $valid_input[$k] = trim($v); /* Вы можете включить в эту функцию различные проверки значений, например if(! задаем условие ) { // если не выполняется $valid_input[$k] = ''; // тогда присваиваем значению пустую строку } */ } return $valid_input; }
Выглядеть в админке WordPress она будет так:
Как использовать данные из собственной страницы настроек
После того как мы создали страницу настроек и сохранили необходимые данные нужно эти значения вставить в шаблон. В моем случае для первого поля (секция HEAD) необходимый код будет выглядеть так:
<?php $theme_all_options = get_option('theme_options'); echo $theme_all_options['my_textarea_head']; ?>
Его необходимо добавить в файл header.php вашей темы перед закрывающим тегом </head>
.
Для второго поля используем похожий код, но теперь вставляем его перед закрывающим тегом </body>
файла footer.php вашего шаблона:
<?php $theme_all_options = get_option('theme_options'); echo $theme_all_options['my_textarea_body']; ?>
Результаты работы страницы настроек
Теперь при необходимости добавить код счетчика поисковой системы или скрипт рекламной сети вам не нужно ковырять код шаблона, просто загляните в страницу настроек темы и добавьте необходимые данные в поля ввода.
Благодарности
При написании статьи были использованы следующие источники:
Перед тем, как бездумно передирать чужой код, проверяйте получившийся результат у себя. А лучше вообще не пишите о том, в чем слабо разбираетесь. В сети полно материала на эту тему
Код на 99% взят у Миши Рудастых, ссылка на его блог есть в конце статьи — https://misha.blog/wordpress/option-pages.html. У меня работает. Но если вы нашли ошибку, то напишите в комментариях, я буду благодарен и исправлю статью.
do_settings_sections($option_page)
замените на
do_settings_sections($options_page)
Доброго дня!
у Вас в коде есть строчка , так вот, что должно быть в этом файле options.php ?