Индивидуальная страница настроек в админке WordPress

Все данные, которые разработчик жестко прописывает в шаблонах темы, например это может быть шапка или подвал сайта, и которые могут в будущем меняться, можно вынести на такую страницу настроек сайта. Информация может быть самая любая: номера телефонов, дополнительные описания, координаты Google Maps и многое другое. Рассмотрим добавление и вывод простого поля телефона. Чтобы клиент мог его вбивать сам и это будет потом где то выводится на сайте.

Файл functions.php:

define("themeSettings", serialize(get_option('myThemeName-theme-settings')));

function myThemeNameSetupAdminMenus() {
    require get_template_directory().'/inc/theme-settings.php';
    add_submenu_page('themes.php',
        'Настройки темы', 'Настройки темы', 'manage_options',
        'myThemeName-theme-settings', 'myThemeNameThemeSettings'
    );
}

function get_theme_option($option){
    $unserialized = unserialize(themeSettings);
    if(array_key_exists($option, $unserialized)){
        return $unserialized[$option];
    }else{
        return null;
    }
}

add_action("admin_menu", "myThemeNameSetupAdminMenus");

Добавляем каталог inc в папке с темой, а в нем файл theme-settings.php:

<?php
if (!current_user_can('manage_options')) {
   wp_die('Недостаточно прав для просмотра настроек.');
}
function myThemeNameThemeSettings() {
   $themeSettings = get_option('myThemeName-theme-settings');
   ?>
   <div class="wrap" xmlns="http://www.w3.org/1999/html">
      <h2>Настройки темы</h2>
      <form method="post" action="options.php" novalidate="novalidate">
         <?php wp_nonce_field('update-options'); ?>
         <input type="hidden" name="action" value="update"/>
         <table class="form-table">
            <tr>
               <th scope="row">
                  <label>Телефон</label>
               </th>
               <td>
                  <input type="text" name="myThemeName-theme-settings[phone]" size="25" maxlength="18" value="<?php echo $themeSettings['phone']; ?>"/>
               </td>
            </tr>
         </table>
         <p class="submit">
            <input type="hidden" name="page_options" value="myThemeName-theme-settings"/>
            <input name="submit" id="submit" class="button button-primary" value="Сохранить" type="submit">
         </p>
      </form>
   </div>
<?php
}

Заходим в админку, добавляем какой нибудь телефон:

page_settings

Выводим на странице, например в header.php:

<?php $themeSettings = get_option('myThemeName-theme-settings');?>
<?php echo $themeSettings['phone'];?>


Похожие заметки:

Dropdown меню на CSS

Пример и реализация выпадающего меню на css

Открыть здесь

Многогранный front-end. Адаптивная верстка и флексбоксы

Приемы верстки с использованием flexbox, легкое выравнивание элементов в два клика. В заметке рассказывается про адаптивную верстку, а также как без использования готового css фреймворка сделать свой адаптивный шаблон, на примере 2-колоночного макета с правой колонкой, шапкой и подвалом

Открыть здесь


Перед тем как писать комментарии, рекомендую ознакомиться:

Markdown синтаксис »

Оформление кода »

Нужна аватарка »

Комментарии