В последнее время все чаще делаю сайты на 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/raftkornnet’,
‘postright’ => ‘3′,
‘catn’ => ‘ 1,3′,
‘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/raftkornnet .
В блоке 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/raftkornnet’,).
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 раз).
Для чего это можно использовать? Да для чего угодно, например:
- Выводить любой текст в шаблоне
- Прописывать статический урлы (фиды, контакты…)
- Задавать любые цифровые значения (количество популярных записей, количество символов в превью, уровень вложенности страниц…)
- Использовать при верстке (цвет бекграунда, ширина сайтбара и текстового блока, адрес картинки для футера…)
Используя переменные можно делать очень удобные и качественные шаблоны.
_______________
Для того чтобы присвоить админке свои стили, после строки:
add_action(’admin_menu’, array(&$this, ‘add_menu’));
Добавляем :
add_action(’admin_head’, array(&$this, ‘admin_head’));
А после блока:
function add_menu() {
add_theme_page(’Theme Options’, ‘Theme Options’, 8, «themadmin», array(&$this, ‘optionsmenu’));
}
Добавляем :
function admin_head() {
print ‘<link rel=»stylesheet» href=»‘.get_template_directory_uri().’/cp.css» type=»text/css» media=»screen» />’;
}
Соответственно, cp.css в папке с темой будет подгружаться как стиль. Таким же образом можно добавить, например, скрипты.
_______________
Так как код не совсем корректно копируется из браузера, и могут возникать ошибки в работе, выкладываю пример файла functions.php:
functions.rar (1.4 КБ, 136 скачиваний)
И functions.php со стилями:
functions и css (1.7 КБ, 77 скачиваний)




- оценить запись.
после этих нововведений сайт не заглючит? Написано понятно, тока изменять стремно у себя(
Sladkij, не заглючит
. Вы возьмите на пробной теме попробуйте. Тем более, что вы только саму тему меняете.
Пора уже подыматься на новый уровень в переходить с ВП скажем на джумлу)
Nolex, а причем тут одно к другому, это два разных движка перед которыми изначально ставились разные цели. Как вп так и джумла – это довольно сильные двиги. Но по гибкости и удобству мне больше нравится вп, хотя некоторые проекты делаю на той же джумле.
Здравствуйте, Виктор.
А можно поинтересоваться вашими успехами в области инвестирования в сайты. Есть ли у Вас опыт оценки того или иного продукта и ориентировочная стратегия раскрутки и получения дохода в будущем? Сорри, что не по теме статьи. Но если блог для новичков в бизнесе в интернете, хотелось бы услышать ваш опыт по данным наработкам.
А как можно прикрутить стандартный визуальный редактор допустим к полю «Текст в шапке»?
Спасибо!
Статья помогла сэкономить кучу времени и нервов
у меня после нововведение вместо сайта выходит какая то ошибка
Parse error: syntax error, unexpected T_STRING, expecting ‘)’ in /home/temae207/domains/softfaq.ru/public_html/wp-content/themes/artemis/functions.php on line 11
@Юрий: нужно посмотреть что у вас там в 11й строке, да и вообще functions.php полностью (можете мне через контактную форму его содержимое кинуть).
отправил.
@Юрий: проблема была в том, что при копировании из браузера не корректно записывались кавычки (редактор заменил), потому и выдавало ошибку. Отправил вам на почту, а также выложил здесь готовый вариант functions.php.
спасибо теперь все работает
сделал все как написано, появилась опция «wp theme options». только когда я на этой странице меняю что нибудь например «текст в шапке» или «текст в подвале» на самом сайте ничего не меняется
@инспектор Гаджет: а Вы в шаблоне теги правильно вставили? После сохранения – в самой админке текст меняеться?
А как быть с css?
@Javelines: css тоже можно подключить, только я сейчас на отдыхе, числа 28 приеду, напишу как.
@Javelines: Добавил в конце поста как подключить свои стили.
@Nolex: Вот поднялись, снесли джумлу, поставили WP.
Спасибо за пример страницы настроек, пригодился.
Вот только не получается подключить к нему файл .css.
Т.е., я подключила так, как вы написали, но wordpress его в упор не видит и стили из этого файла не на странице не отображаются.
В чем может быть причина,помогите пожалуйста, разобраться.
@Ksana: я на днях выложу пример файла с подгрузкой стилей.
@Ksana: забыл дописать одну строку
. В описании исправил и выложил архив с уже примененными стилями.
RaftKorn, спасибо.
Ваш пример меня просто спас – нужно было сделать нестандартный диз для страницы настроек (так клиент попросил), а стили не подключались.
Зато теперь все получилось отлично.
Спасибо!
Здравствуйте, не однократно читал вашу статью, которая в своем роде спасла бы меня, если бы не пару нюансов..
Например в значениях по умолчанию – нельзя использовать переменные, это меня очень огорчило, хотя многим и не нужно это вообще, если речь идет о конкретном сайте, но при разработке шаблонов – это необходимо..((
Поискав по инету, найти вообще статей по данной теме практически невозможно, пришлось написать свою:
Опции Текущей Темы в WordPress, в данной статье используется другой способ, насколько я считаю более удачный. Хотя, кому как удобно.
Да и кстати, используя данный метод – засоряется БД, в моем же способе – в Базу Данных ничего не добавляется, если используется дефол, сами дефолтные настройки хранятся в самом шаблоне..))
@d0s: не плохо. Скажем так – эта админка что я описал совсем простая, и используется чисто для вывода определенных данных. Вообще я сейчас использую совершенно другую, более продвинутую, с одной стороны более тяжелую, но с другой более удобную. Если будет время напишу о ней.