Своя админка для темы в WordPress

RaftKorn
На сайте с 20.03.2007
Offline
166
3701

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

Как мы все знаем, в шаблоне есть много вещей, которые прописаны именно в файлах шаблона, и изменить их можно только там, например: адрес RSS фида, какой-то текст в шапке или футере, урлы страниц которые прописаны именно в шаблоне, и многое другое.

Когда сдаешь работу заказчику, приходится объяснять как изменить то или то, как править шаблоны и прочее.

Теперь расскажу как все эти параметры, которые в будущем возможно нужно будет изменить, вынести в отдельную админку:

Как подключить админку:

В файле header.php в самом верху прописываем:

<?php global $mytheme; ?>

В файле functions.php (после <?php ) прописываем:

/*********************************************************
Theme Control Panel
*********************************************************/
class ControlPanel {

/********************************************************
Array for Default Options
********************************************************/
var $default_settings = Array(
feed‘ => ‘ http://feeds.feedburner.com/’,
‘postright’ => ‘3&#8242;,
‘catn’ => ‘ 1,3&#8242;,
‘headtext’ => ‘Ну очень красивая шапка!’,
‘footertext’ => ‘Copyright © 2009 - Самый крутой сайт!’,
);

var $options;

/********************************************************
Initiate new control panel function
********************************************************/
function ControlPanel() {
add_action(’admin_menu’, array(&$this, ‘add_menu’));
if (!is_array(get_option(’themadmin’)))
add_option(’themadmin’, $this->default_settings);
$this->options = get_option(’themadmin’);
}

/********************************************************
Create a theme settings page to edit theme settings and put its css
********************************************************/
function add_menu() {
add_theme_page(’Theme Options’, ‘Theme Options’, 8, “themadmin”, array(&$this, ‘optionsmenu’));
}

/********************************************************
The options page in control panel. Saving and editing goes here
********************************************************/
function optionsmenu() {
if ($_POST['ss_action'] == ’save’) {
$this->options["feed"] = $_POST['cp_feed'];
$this->options["postright"] = $_POST['cp_postright'];
$this->options["catright"] = $_POST['cp_catright'];
$this->options["headtext"] = $_POST['cp_headtext'];
$this->options["footertext"] = $_POST['cp_footertext'];
update_option(’themadmin’, $this->options);
echo ‘<div class=”updated fade” id=”message” style=”background-color: rgb(255, 251, 204); width: 400px; margin-left: 17px; margin-top: 17px;”><p>Your changes have been <strong>saved</strong>.</p></div>’;
}

echo ‘<form action=”" method=”post” class=”themeform”>’;
echo ‘<input type=”hidden” id=”ss_action” name=”ss_action” value=”save”>’;

print ‘
<div class=”cptab”><br>
<b>Theme Options</b>
<br>
<p><input class=”widefat” style=”width:300px” name=”cp_feed” id=”cp_feed” value=”‘.$this->options["feed"].’”> Адрес RSS фида</p>
<p><input class=”widefat” style=”width:100px” name=”cp_postright” id=”cp_postright” value=”‘.$this->options["postright"].’”> Количество постов в правой колонке</p>
<p><input class=”widefat” style=”width:100px” name=”cp_catright” id=”cp_catright” value=”‘.$this->options["catright"].’”> Рубрики для правой колонки (через запятую)</p>
<p>Текст в шапке:<br /><textarea style=”width:400px;height:75px;” name=”cp_headtext” id=”cp_headtext”>’.stripslashes($this->options["headtext"]).’</textarea></p>
<p>Текст в подвале:<br /><textarea style=”width:400px;height:75px;” name=”cp_footertext” id=”cp_footertext”>’.stripslashes($this->options["footertext"]).’</textarea></p>
</div>
‘;

echo ‘Все готово? Тогда <input type=”submit” value=”Сохранимся »” name=”cp_save” class=”dochanges” />’;
echo ‘</form>’;
}

/* ended cpanel class */
}

$cpanel = new ControlPanel();
$mytheme = get_option(’themadmin’);

Разберем немного поподробней этот код.

В блоке Array for Default Options задаются сами переменные и их начальное значение. К примеру произвольная переменная feed и ее изначальное значение http://feeds.feedburner.com/ .

В блоке The options page in control panel мы подключаем переменные к админке, тут ничего сложного нет (строка $this->options["feed"] = $_POST['cp_feed']; ).

В Theme Options мы делаем вывод переменных в админку (<p><input class=”widefat” style=”width:300px” name=”cp_feed” id=”cp_feed” value=”‘.$this->options["feed"].’”> Адрес RSS фида</p>).

И так, для того чтобы подключить переменную feed нам нужно:

1) В блоке Array for Default Options указать эту переменную и ее значение (’feed’ => ‘ http://feeds.feedburner.com/’,).

2) Указать переменную в блоке The options page in control panel ($this->options["feed"] = $_POST['cp_feed'];)

3) Сделать вывод переменной в Theme Options (<p><input class=”widefat” style=”width:300px” name=”cp_feed” id=”cp_feed” value=”‘.$this->options["feed"].’”> Адрес RSS фида</p>) – тут сама переменная указывается в трех местах (name, id и value).

Все, переменная у нас подключена в админке, теперь для чтобы вставить ее в шаблоне выполняем функцию:

<?=$mytheme['имя_переменной']?>
Например: (<?=$mytheme['feed']?>)

Если перменная выводится внутри php функции, то это делается так:

‘.$mytheme['catn'].’
Например: query(’showposts=1&cat=’.$mytheme['catn'].”);

Для того чтобы использовать переменные в сайдбаре или футере, то их в шаблон нужно инклудить не через

<?php get_footer(); ?> и <?php get_sidebar(); ?>

а вот так:

<?php include (TEMPLATEPATH . ‘/ footer.php’); ?> и <?php include (TEMPLATEPATH . ‘/sidebar.php’); ?>

Когда вы первый раз сохраните functions.php – все переменные которые там есть запишутся в БД, и сразу появятся в админке, но когда вы уже потом будете добавлять новые переменные в functions.php, они в админке будут идти с пустыми полями – это ничего страшного, когда заказчик активируется тему у себя первый раз – все переменные у него заполнятся правильно.

Желательно на каждом новом шаблоне делать уникальной переменную themadmin (themadmin1, themadmin2…) – это переменная самой админки, и под таким названием создается строка в БД (сама переменная в коде встречается 6 раз, т.е. заменить ее надо 6 раз).

Для чего это можно использовать? Да для чего угодно, например:

  • Выводить любой текст в шаблоне
  • Прописывать статический урлы (фиды, контакты…)
  • Задавать любые цифровые значения (количество популярных записей, количество символов в превью, уровень вложенности страниц…)
  • Использовать при верстке (цвет бекграунда, ширина сайтбара и текстового блока, адрес картинки для футера…)

Используя переменные можно делать очень удобные и качественные шаблоны.

Ну, и скромная ссылка на источник.

Премиум верстка и дизайн под ключ ( https://searchengines.guru/ru/forum/1045270 )
kopusha
На сайте с 04.11.2008
Offline
175
#1

спасибо, пригодится

Sentoro
На сайте с 18.03.2007
Offline
149
#2

Будем пробовать, пасиб.

Продается СДЛ на тему инвестирования (http://www.telderi.ru/ru/viewsite/903457)
RaftKorn
На сайте с 20.03.2007
Offline
166
#3

Всегда пожалуйста :).

АrТ
На сайте с 21.02.2009
Offline
115
#4

Обязательно попробую.

Спасибо за полезную инфу.

unodj
На сайте с 18.09.2007
Offline
47
#5

а я думал речь в топике об админке WP в стиле темы сайта )

Я уже разрабатывал такие решения, интересно стало как это делают другие разработчики :)

Дело в том, что некоторые заказчики желают, чтобы админка была копией структуры и дизайна самого сайта,

им кажется, что тогда даже секретарша сможет разобраться в управлении сайтом ;)

RaftKorn
На сайте с 20.03.2007
Offline
166
#6

unodj, как по мне, так проще чем у ВП админки не найти :).

А этот вариант еще и поможет изменения в шаблоне упростить!

unodj
На сайте с 18.09.2007
Offline
47
#7
RaftKorn:
unodj, как по мне, так проще чем у ВП админки не найти :).
А этот вариант еще и поможет изменения в шаблоне упростить!

секретарши разные бывают :D

Для простейшего сайта с одной лентой записей - админки WP вполне достаточно, но применительно к полноценному сайту с разными разделами и кучей шаблонов для разных типов записей, страниц и рубрик, если админка отражает структуру и дизайн сайта - с ней гораздо проще управляться человеку, не обладающему абстрактным мышлением ;)

А то пойди объясни этим секретуткам как это так, пишешь в одном месте и обычным текстом, картинки загружаешь в другом месте,

а записи на сайте потом отображаются в других местах, при этом совершенно иначе выглядят и текст оформлен во другому, и картинки сами в нужных местах вставляются и т.д.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий