Go up
Вы используете устаревший браузер. Подробнее »
Чтобы использовать все возможности сайта, загрузите и установите один из этих браузеров: Используется тема VK-Style © http://Sergey.Pro
Записи d0s

Долго собирался написать данную статью, но все никак не доходили руки. И так приступим.
Многие разрабатывают шаблоны и бывают такие ситуации, когда хочется сделать, что-то более удобней, но никак не получается, так как тот или иной параметр нужно менять именно в шаблоне.
Как например рисунок на главной странице - изначально просто указать что рисунок .jpg и хранится он в папке тему, но мы заранее уже знаем о том, что не всем может понравится тот или иной рисунок, а для того что бы его поменять - нужно лазить по ftp в папку темы и там его заменять - совсем не удобно. Проще всего зайти в Опции Текущей Темы и просто там вставить ссылку на изображение.)

Как создать Опции Текущей Темы мы сейчас и рассмотрим на примере моего собственного шаблона - тема вКонтакте.

Идем в Админ Панель -> Внешний вид -> Редактор

Для начала нам необходимо подключить Опции Текущей Темы.

Выбираем файл header.php, перед </head> вставляем следующий код

<?php
global $options;
foreach ($options as $value) {
		global $$value['id'];
        if (get_settings( $value['id'] ) === FALSE) { $$value['id'] = $value['std']; } else { $$value['id'] = get_settings( $value['id'] ); } }
?>

Теперь создадим Опции Темы.

Выбираем файл functions.php, перед ?> вставляем следующий код

$themename = "vkontakte";
$shortname = "vk";
$options = array (
    
array(	"name" => "General Settings",
		"type" => "title"),

	array(  "name" => "Name First Page",
			"desc" => "Example: My Page",
            "id" => $shortname."_mypage",
            "std" => "",
            "type" => "text"),
 	
	array(  "name" => "URL Photo",
			"desc" => "Width 180 px. Example: http://blog.dd0s.ru/photo.jpg",
            "id" => $shortname."_urlphoto",
            "std" => "",
            "type" => "text"),

array(	"name" => "Contact Info",
		"type" => "title"),

	array(  "name" => "E-mail",
			"desc" => "Example: blog@dd0s.ru",
            "id" => $shortname."_email",
            "std" => "",
            "type" => "text"),
 	
	array(  "name" => "ICQ",
			"desc" => "NOT correctly: 950-64-333. Example: 95064333",
            "id" => $shortname."_icq",
            "std" => "",
            "type" => "text"),

);


function mytheme_add_admin() {

    global $themename, $shortname, $options;

    if ( $_GET['page'] == basename(__FILE__) ) {
    
        if ( 'save' == $_REQUEST['action'] ) {

                foreach ($options as $value) {
                    update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }

                foreach ($options as $value) {
                    if( isset( $_REQUEST[ $value['id'] ] ) ) {
                                            if ($value['type'] == 'textarea' || $value['type'] == 'text' || $value['type'] == 'textlimit' || $value['type'] == 'upload') update_option( $value['id'], stripslashes($_REQUEST[$value['id']]) );
						elseif ($value['type'] == 'select') update_option( $value['id'], htmlspecialchars($_POST[$value['id']]) );
						else update_option( $value['id'], $_POST[ $value['id'] ]  );
					} else { delete_option( $value['id'] ); } }

                header("Location: themes.php?page=functions.php&amp;amp;amp;saved=true");
                die;

        } else if( 'reset' == $_REQUEST['action'] ) {

            foreach ($options as $value) {
                delete_option( $value['id'] ); }

            header("Location: themes.php?page=functions.php&amp;amp;amp;reset=true");
            die;

        }
    }
    add_theme_page($themename." Theme Options", "Theme Options", 'edit_themes', basename(__FILE__), 'mytheme_admin');

}

function mytheme_admin() {

    global $themename, $shortname, $options;

    if ( $_REQUEST['saved'] ) echo '<div id="message" class="updated fade"><p><strong> Settings '.$themename.' сохранены.</strong></p></div>';
    if ( $_REQUEST['reset'] ) echo '<div id="message" class="updated fade"><p><strong>Настройки '.$themename.' сброшены.</strong></p></div>';
    
?>

<style type="text/css"  >
	
	h3 { padding:10px 20px; margin:20px 0 0 0; font:normal 18px Arial, Helvetica, sans-serif; color: #fff ; background:#52778a; }
	
	.admin_table td, .admin_table th { padding:8px 8px 5px 8px; border-bottom:1px solid #ccc; background:#eee; font:12px Arial, Helvetica, sans-serif; color:#333;  }
	
	.admin_table th { font-weight:bold; text-align:left; width:200px; }
	
	.admin_table td input, .admin_table td select { background:#fff; padding:4px; width:400px; border:1px solid #ccc; margin-bottom:4px;   }
	
	.admin_table td select { width:200px;  }
	
	.admin_table td.head { background:#fff; padding:0; margin:0;  }
	
</style>

<h2><?php echo $themename; ?> <?php _e('General Settings'); ?></h2>
<form method="post">
  <table class="admin_table">
    <?php foreach ($options as $value) {
    
if ($value['type'] == "title") { ?>
		<tr valign="top"> 
		    <td colspan="2" class="head"><h3 ><?php echo $value['name']; ?></h3></td>
		</tr>

    <?php } elseif ($value['type'] == "checkbox") { ?>

    <tr valign="top">
      <th scope="row" style="font:bold 11px Verdana, Arial, Helvetica, sans-serif; padding-top:10px;"><?php echo $value['name']; ?>:</th>
      <td><? if(get_settings($value['id'])){ $checked = "checked=\"checked\""; }else{ $checked = ""; } ?>
                        <input type="checkbox" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" value="true" <?php echo $checked; ?> />
        <br />
        <small><?php echo $value['desc'] ; ?></small> </td>
    </tr>


    <?php } elseif ($value['type'] == "text") { ?>

    <tr valign="top">
      <th scope="row" style="font:bold 11px Verdana, Arial, Helvetica, sans-serif; padding-top:10px;"><?php echo $value['name']; ?>:</th>
      <td><input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?>" />
        <br />
        <small><?php echo $value['desc'] ; ?></small> </td>
    </tr>

    <?php } elseif ($value['type'] == "select") { ?>
    <tr valign="top">
      <th scope="row" style="font:bold 11px Verdana; padding-top:10px;"><?php echo $value['name']; ?>:</th>
      <td style="font:11px Verdana, Arial, Helvetica, sans-serif;"><select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
         <?php foreach ($value['options'] as $option) {  ?>
           <option<?php if ( get_option( $value['id'] )  == $option) { echo ' selected="selected"'; } elseif ($option ==  $value['std']) { echo ' selected="selected"'; } ?>><?php echo  $option; ?></option>
          <?php } ?>
        </select>
        <br />
        <small><?php echo $value['desc'] ; ?></small> </td>
    </tr>


	<?php } elseif ($value['type'] == "textarea") { ?>

    <tr valign="top">
      <th scope="row" style="font:bold 11px Verdana, Arial, Helvetica, sans-serif; padding-top:10px;"><?php echo $value['name']; ?>:</th>
      <td><<?php echo $value['type']; ?> name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" /><?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?></textarea>
        <br />
        <small><?php echo $value['desc'] ; ?></small> </td>
    </tr>

    <?php
}
}
?>
  </table>
  <p class="submit">
    <input name="save" type="submit" value="Сохранить" />
    <input type="hidden" name="action" value="save" />
  </p>
</form>
<form method="post">
  <p class="submit">
    <input name="reset" type="submit" value="Сбросить" />
    <input type="hidden" name="action" value="reset" />
  </p>
</form>
<?php
}

function mytheme_wp_head() { ?>
<link href="<?php bloginfo('template_directory'); ?>/style.css" rel="stylesheet" type="text/css" />
<?php }

add_action('wp_head', 'mytheme_wp_head');
add_action('admin_menu', 'mytheme_add_admin'); 

Разберем Код.

Сразу говорю - не пугайтесь, тут в коде много лишнего, а специально делать код с 1 примером было лень.)) Да и как известно всегда нужно учиться на сложном, тогда что-то простое сделать вы точно сможете. Так что глаза бояться, а руки делают.))

В самом начале кода мы видим:

$themename = "vkontakte";
$shortname = "vk";

Это простое название темы и условное сокращение (префикс) - которое нужно нам для удобства в дальнейшем, не пишите слишком длинным. С таким же префиксом будут добавляться и строчки в Базу Данных. Я для удобства назвал, по названию текущей темы.

Далее

array(	"name" => "General Settings",
		"type" => "title"),

	array(  "name" => "Name First Page",
			"desc" => "Example: My Page",
            "id" => $shortname."_mypage",
            "std" => "",
            "type" => "text"),

	array(  "name" => "URL Photo",
			"desc" => "Width 180 px. Example: http://blog.dd0s.ru/photo.jpg",
            "id" => $shortname."_urlphoto",
            "std" => "",
            "type" => "text"),

Остальное повторяется рассмотрим и разберем данный кусочек:
name - Отображаемое Название в Опциях Темы.
type - тип Поля, в первом случае мы использовали title (название), во втором text (текстовое поле).
desc - Description (описание)
id $shortname."_xxx" - название которое заносится в Базу Данных, где xxx - любое название, а $shortname. - мы задавали выше, у нас оно - vk
std (select) - выбор, я это поле оставляю пустым -))

Строчки 01, 02 - на самом деле нам вообще не нужны, они просто для нашего удобства - Используются, как заголовок раздела настроек, удобно использовать, если вы используете много настроек.

Далее

function mytheme_add_admin() {

    global $themename, $shortname, $options;

    if ( $_GET['page'] == basename(__FILE__) ) {
    
        if ( 'save' == $_REQUEST['action'] ) {

                foreach ($options as $value) {
                    update_option( $value['id'], $_REQUEST[ $value['id'] ] ); }

                foreach ($options as $value) {
                    if( isset( $_REQUEST[ $value['id'] ] ) ) {
                                            if ($value['type'] == 'textarea' || $value['type'] == 'text' || $value['type'] == 'textlimit' || $value['type'] == 'upload') update_option( $value['id'], stripslashes($_REQUEST[$value['id']]) );
						elseif ($value['type'] == 'select') update_option( $value['id'], htmlspecialchars($_POST[$value['id']]) );
						else update_option( $value['id'], $_POST[ $value['id'] ]  );
					} else { delete_option( $value['id'] ); } }

                header("Location: themes.php?page=functions.php&amp;amp;amp;saved=true");
                die;

        } else if( 'reset' == $_REQUEST['action'] ) {

            foreach ($options as $value) {
                delete_option( $value['id'] ); }

            header("Location: themes.php?page=functions.php&amp;amp;amp;reset=true");
            die;

        }
    }

Этот кусок кода Не Изменяем, просто копируете его и всё, это добавляет к нашей теме Кнопки [Сохранить], [Сбросить] настройки темы

Далее

    add_theme_page($themename." Theme Options 1", "Theme Options 2", 'edit_themes', basename(__FILE__), 'mytheme_admin');

}

$themename." Theme Options 1" - это то, что выводится в Заголовок Страницы, при открытии Опции Темы, где $themename. - название нашей темы, мы его задавали в самом начале, а Theme Options 1 - можете написать Все что хотите -))
Theme Options 2 (Опции Темы) - это название будет выводиться у вас в Админ Панеле, сразу же после раздела Добавить Темы.
Остальное все оставляем как есть..)

Далее

function mytheme_admin() {

    global $themename, $shortname, $options;

    if ( $_REQUEST['saved'] ) echo '<div id="message" class="updated fade"><p><strong>Настройки '.$themename.' сохранены.</strong></p></div>';
    if ( $_REQUEST['reset'] ) echo '<div id="message" class="updated fade"><p><strong>Настройки '.$themename.' сброшены.</strong></p></div>';
    
?>

Оставляем как есть (текст можете редактировать) - это те сообщения которые будут выводиться после нажатия кнопок [Сохранить], [Сбросить].

Далее

<style type="text/css"  >
	
	h3 { padding:10px 20px; margin:20px 0 0 0; font:normal 18px Arial, Helvetica, sans-serif; color: #fff ; background:#52778a; }
	
	.admin_table td, .admin_table th { padding:8px 8px 5px 8px; border-bottom:1px solid #ccc; background:#eee; font:12px Arial, Helvetica, sans-serif; color:#333;  }
	
	.admin_table th { font-weight:bold; text-align:left; width:200px; }
	
	.admin_table td input, .admin_table td select { background:#fff; padding:4px; width:400px; border:1px solid #ccc; margin-bottom:4px;   }
	
	.admin_table td select { width:200px;  }
	
	.admin_table td.head { background:#fff; padding:0; margin:0;  }
	
</style>

Здесь Стиль нашей страницы Опции Темы, можете скопировать, а можете не копировать вообще - дело сугубо личное -))

Далее

<h2><?php echo $themename; ?> <?php _e('General Settings'); ?></h2>
<form method="post">
  <table class="admin_table">
    <?php foreach ($options as $value) {
    
if ($value['type'] == "title") { ?>
		<tr valign="top"> 
		    <td colspan="2" class="head"><h3 ><?php echo $value['name']; ?></h3></td>
		</tr>

    <?php } elseif ($value['type'] == "checkbox") { ?>

    <tr valign="top">
      <th scope="row" style="font:bold 11px Verdana, Arial, Helvetica, sans-serif; padding-top:10px;"><?php echo $value['name']; ?>:</th>
      <td><? if(get_settings($value['id'])){ $checked = "checked=\"checked\""; }else{ $checked = ""; } ?>
                        <input type="checkbox" name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" value="true" <?php echo $checked; ?> />
        <br />
        <small><?php echo $value['desc'] ; ?></small> </td>
    </tr>


    <?php } elseif ($value['type'] == "text") { ?>

    <tr valign="top">
      <th scope="row" style="font:bold 11px Verdana, Arial, Helvetica, sans-serif; padding-top:10px;"><?php echo $value['name']; ?>:</th>
      <td><input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?>" />
        <br />
        <small><?php echo $value['desc'] ; ?></small> </td>
    </tr>

    <?php } elseif ($value['type'] == "select") { ?>
    <tr valign="top">
      <th scope="row" style="font:bold 11px Verdana; padding-top:10px;"><?php echo $value['name']; ?>:</th>
      <td style="font:11px Verdana, Arial, Helvetica, sans-serif;"><select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
         <?php foreach ($value['options'] as $option) {  ?>
           <option<?php if ( get_option( $value['id'] )  == $option) { echo ' selected="selected"'; } elseif ($option ==  $value['std']) { echo ' selected="selected"'; } ?>><?php echo  $option; ?></option>
          <?php } ?>
        </select>
        <br />
        <small><?php echo $value['desc'] ; ?></small> </td>
    </tr>


	<?php } elseif ($value['type'] == "textarea") { ?>

    <tr valign="top">
      <th scope="row" style="font:bold 11px Verdana, Arial, Helvetica, sans-serif; padding-top:10px;"><?php echo $value['name']; ?>:</th>
      <td><<?php echo $value['type']; ?> name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" /><?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?></textarea>
        <br />
        <small><?php echo $value['desc'] ; ?></small> </td>
    </tr>

    <?php
}
}
?>
  </table>
  <p class="submit">
    <input name="save" type="submit" value="Сохранить" />
    <input type="hidden" name="action" value="save" />
  </p>
</form>
<form method="post">
  <p class="submit">
    <input name="reset" type="submit" value="Сбросить" />
    <input type="hidden" name="action" value="reset" />
  </p>
</form>
<?php
}

Здесь Верстка страницы Опции Темы, следовательно описывать, что куда зачем - нет смысла, если не разбираетесь - просто копируйте весь код и не думайте..))

Далее

function mytheme_wp_head() { ?>
<link href="<?php bloginfo('template_directory'); ?>/style.css" rel="stylesheet" type="text/css" />
<?php }

Здесь указываем путь к стилю, который будет загружаться. Короче фигня.))

Далее

add_action('wp_head', 'mytheme_wp_head');
add_action('admin_menu', 'mytheme_add_admin');

Оставляем без изменений!

Использование полей Опции Темы в Шаблоне.

Идем в Админ Панель -> Внешний вид -> Редактор

Выбираем шаблон куда хотим засунуть переменную. В моем шаблоне тема вКонтакте, мне нужно было дать людям возможность вставлять ссылку на собственное изображение, выше, если вы внимательно посмотрите, я использовал для этого переменную _urlphoto, на практике все выглядит так:

<? if ($vk_urlphoto == "") { ?>
        <img align="middle" width="180px" src="<?php bloginfo('template_directory'); ?>/photo.jpg" alt="<?php bloginfo('name'); ?>"/>
<? } else { ?>
        <img align="middle" width="180px" src="<?php echo $vk_urlphoto; ?>" alt="<?php bloginfo('name'); ?>"/>
<? } ?>

Теперь разберем

Смысл просто, если поле пустое (в Опции Текущей Темы), то будет одно, если поле заполнено, то будет другое.

<? if ($vk_urlphoto == "") { ?> - начало использование переменной _urlphoto. После этой строчки пишем то, что будет выводиться, если поле не задано.

<? } else { ?> - Если поле заполнено, то будет выводиться все то, что идет после этой строки.

<?php echo $vk_urlphoto; ?> - Заполненного поля

<? } ?> - конец использования переменной.

Рассмотрим еще два примера

Простой Вариант

<? if ($vk_icq == "") { ?> <? } else { ?>
     <b>ICQ:</b> <?php echo $vk_icq; ?>
<? } ?>

Сложный Вариант

<? if ($vk_icq == "") { ?> <? } else { ?>
     <b>ICQ:</b> <a target="_blank" href="http://www.icq.com/people/<?php echo $vk_icq; ?>"><?php echo $vk_icq; ?></a> <img src="http://web.icq.com/whitepages/online?icq=<?php echo $vk_icq; ?>&amp;amp;amp;img=27" width="12" height="12" valign="middle"/>
<? } ?>

Если на самом деле посмотреть эти два варианта очень просты, просто в первом случае мы получили просто текст, а во втором случае мы получили ссылку из этого текста.

Если вы внимательно заметили, то после <? if ($vk_icq == "") { ?> у нас сразу идет <? } else { ?>, нет никакого текста, в результате мы и получаем, что, если поле не заполнено, то ничего и не выводиться..))

Тонкость использования

Для того чтобы использовать переменные в Боковой колонке (sidebar.php) или в Подвале (footer.php), то в шаблоне нужно выводить их не так:

<?php get_sidebar(); ?>

а так:

<?php include (TEMPLATEPATH .'/sidebar.php'); ?>

Особенности

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

Второе же преимущество заключается как раз в использование переменных, в моем случае, я могу легко добавить в шаблон переменную и зная что она будет работать, а вот в другом варианте мне это не получилось сделать..(( - Пример вставки Рисунка. когда я в шаблон добавлял переменную <?php bloginfo('template_directory'); ?>

Заключение

И в заключение хотел всех поблагодарить, за потраченное время, на прочтение данной статьи. Пользуйтесь на здоровье! Надеюсь кому-то это пригодилось.

С Уважением I'm

P.S.

ссылка: <a href="http://blog.dd0s.ru/2010/04/10/theme-options.htm">Опции Текущей Темы в WordPress</a>


И хотелось бы увидеть примеры с чекбоксами, селектами, радиобаттонами.

Принцип такой же, пример:

Добавляем в меню:

	array(  "name" => "The Bottom Menu",
	    "desc" => "",
            "id" => $shortname."_menubottom",
            "std" => "on",
            "options" => array("on", "off"),
            "type" => "select"),

там же в функции

    <?php } elseif ($value['type'] == "select") { ?>
    <tr valign="top">
      <th scope="row" style="font:bold 11px Verdana; padding-top:10px;"><?php echo $value['name']; ?>:</th>
      <td style="font:11px Verdana, Arial, Helvetica, sans-serif;"><select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
         <?php foreach ($value['options'] as $option) {  ?>
           <option<?php if ( get_option( $value['id'] )  == $option) { echo ' selected="selected"'; } elseif ($option ==  $value['std']) { echo ' selected="selected"'; } ?>><?php echo  $option; ?></option>
          <?php } ?>
        </select>
        <br />
        <small><?php echo $value['desc'] ; ?></small> </td>
    </tr>

в теме

	<?php if ($vk_menubottom == "on") { ?>
	<a href="<?php echo home_url(); ?>">Home</a>
	<?php } else { ?>
	<?php } ?>

А вообще я все сводил к законам, Если это - то выводится это, если это, то выводится это..

Касаемо radio, думаю смысл такой же как и с select, a с checkbox честно говоря даже представить не могу..)) Когда он нужен и главное для чего?.)) Так что врать не буду - ничего по поводу этого не скажу.))

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Давно искал нечто подобное =) Спасибо! Свою «с нуля» админку писать пока не решусь, сначала попробую править… в шаблонах от zenverse отличные админки.

d0s:
23 Апр 2010 в 12:04

k0tello пишет:

Свою «с нуля» админку писать пока не решусь, сначала попробую править…

Бояться в лес не ходить.)) А пробовать всегда надо. Пусть будет криво, косо, через попу, но иначе никак 😉

k0tello пишет:

в шаблонах от zenverse отличные админки

Не люблю шаблоны — они меня вечно не устраивают -)) Проще новый написать.))

Владимир:
7 Окт 2010 в 10:00

Спасибо, нужный материал, очень помог, желаю успехов!

Stan:
5 Июн 2011 в 1:14

Спасибо за статью.
Немного дополню, если использовать для вывода данных get_option():

то в header.php не нужно ничего прописывать, и подключать модули можно как обычно get_sidebar и т.д.

И хотелось бы увидеть примеры с чекбоксами, селектами, радиобаттонами.

    d0s:
    5 Июн 2011 в 11:06

    Stan:

    Спасибо за статью.

    Не за что, но думаю она уже не актуальна давно..

    Немного дополню, если использовать для вывода данных get_option():

    то в header.php не нужно ничего прописывать, и подключать модули можно как обычно get_sidebar и т.д.

    Интересно, нужно будет посмотреть что да как.. ))

    И хотелось бы увидеть примеры с чекбоксами, селектами, радиобаттонами.

    добавил в конец статьи.)

      Stan:
      5 Июн 2011 в 14:19

      Почему же не актуальна) Вроде ничего проще пока нет, кроме одного навороченного плагина и других похожих на ваш способов.

      Спасибо за примеры. А чекбоксы полезны для вкл/выкл показа различных элементов(блоков) темы.

      Для вывода в шаблоне использую просто: echo get_option(‘vk_mypage’); — вп-шная функция для получения значений из таблицы wp-options.

        d0s:
        5 Июн 2011 в 15:05

        Stan:

        Почему же не актуальна) Вроде ничего проще пока нет, кроме одного навороченного плагина и других похожих на ваш способов.

        потому что в этом способе есть ошибки — WP меняется и обновляется, некоторые функции меняются.. я когда создавал тему VK-Style — и пытался добавить ее в репозиторий WP как раз столкнулся с кучей проблем и ошибок.. и половина кода из этой статьи уже не актуален..

        Спасибо за примеры. А чекбоксы полезны для вкл/выкл показа различных элементов(блоков) темы.

        не за что.. )) я для это использую select (on, off) ..))

        Для вывода в шаблоне использую просто: echo get_option(‘vk_mypage’); – вп-шная функция для получения значений из таблицы wp-options.

        я что-то пытаюсь, у меня не совсем все выходит — может потому что половину нужно убирать.. или может я вас не понял, вы сказали можно не добавлять ничего в header.php при этом еще и не инклудить, а получать ГЕТом.. так если убрать и на гет поменять и использовать echo get_option — не выходит.. может просто потому что шаблон слишком наворочен..)) По идее то должно все пахать.. но что-то не идет..)) Гад..))

        Вообще если скачаете данную тему, то можете внутри нарыть как раз правильный код Опции темы.. (вот думаю может статейку новую написать, с уже правильным кодом — но так лень..)))

          Stan:
          5 Июн 2011 в 18:37

          d0s:

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

          Вот сейчас на последней версии ВП нормально ваш код работает.
          Универсальные темы делать конечно труднее чем под конкретный сайт с конкретными функциями.
          d0s:

          может потому что половину нужно убирать..

          не нужно, а можно) да, в head можно не добавлять ничего и подключать гетом.
          У меня сейчас так выводятся переменные в sidebar.php и в footer.php
          Но даже если не уберете лишний код, get_option() должен работать все равно.
          Такое например у всех должно работать: echo get_option(‘blogname’);
          d0s:

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

          посмотрю на досуге))d0s:

          вот думаю может статейку новую написать, с уже правильным кодом – но так лень..))

          Пишите пишите, по этой теме реально мало чего можно найти нормального.)

          Еще хотел вынести весь код опций в отдельный файл и заинклудить в function.php, но в этом случае получается косяк с сохранением настроек в админке, данные с формы видимо не туда отсылаются.

          d0s:
          6 Июн 2011 в 13:17

          Stan:

          Вот сейчас на последней версии ВП нормально ваш код работает.
          Универсальные темы делать конечно труднее чем под конкретный сайт с конкретными функциями.

          Он на любой версии будет работать, но если вы в конфиге откроете вывод ошибок — увидите, что вылезет куча ошибок — а это недопустимо..))

          Stan:

          не нужно, а можно) да, в head можно не добавлять ничего и подключать гетом.
          У меня сейчас так выводятся переменные в sidebar.php и в footer.php
          Но даже если не уберете лишний код, get_option() должен работать все равно.
          Такое например у всех должно работать: echo get_option(‘blogname’);

          Да я просто тупил малость, у меня же почти все переменные выводятся так:

          1
          2
          3
          4
          5
          &lt;?php if ($vk_totop == "") { ?&gt;
          &lt;a id="toTop" href="" class="fixed"&gt;Back to Top&lt;/a&gt;
          &lt;?php } else { ?&gt;
          &lt;a id="toTop" href="" class="fixed"&gt;&lt;?php echo $vk_totop; ?&gt;&lt;/a&gt;
          &lt;?php } ?&gt;

          а надо так

          1
          2
          3
          4
          5
          6
          7
          8
          9
          &lt;?php
          $vk_totop = get_option('vk_totop');

          if ($vk_totop == "") {
              echo "&lt;a id='toTop' href='' class='fixed'&gt;Back to Top&lt;/a&gt;";
          } else {
              echo "&lt;a id='toTop' href='' class='fixed'&gt;".$vk_totop."&lt;/a&gt;";
          }
          ?&gt;

          Stan:

          Пишите пишите, по этой теме реально мало чего можно найти нормального.)

          это точно — сам решения с трудом находил на англоязычных сайтах..))

          Stan:

          Еще хотел вынести весь код опций в отдельный файл и заинклудить в function.php, но в этом случае получается косяк с сохранением настроек в админке, данные с формы видимо не туда отсылаются.

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

Дима:
27 Окт 2012 в 23:38

Спасибо большое) сейчас затестил на свежем ВП — работает! Буду разбираться более углубленно. Действительно, по этой теме очень мало информации.

Дима:
29 Окт 2012 в 0:16

Скажите пожалуйста, а можно вывести в админке темы HTML код (вставляю, к примеру, ссылку — не работает) ?

    d0s:
    29 Окт 2012 в 11:25

    Можно, но есть одно маленькое условие, в вашем коде не должно быть символа » (кавычек).
    Пример:

    1
    <a href=http://blog.dd0s.ru>d0s</a>
Дима:
29 Окт 2012 в 19:13

d0s:

d0s

Понятно, а если будет код рекламы (к примеру, от адсенса?) как тогда поступить?

    d0s:
    30 Окт 2012 в 11:05

    Дима:

    Понятно, а если будет код рекламы (к примеру, от адсенса?) как тогда поступить?

    А что в коде мешает убрать кавычки?..)) Или вообще люди пишут, что через функцию вызывают эти реклаамные блоки.. Вообще, что мешает в нужном месте сделать include php файла, а в него уже все запихать?..))

      Дима:
      30 Окт 2012 в 16:43

      Да, но ведь чтобы запихнуть в файл что-то — нужно лезть в код :)) то есть вообще нельзя ничего сделать? и за отдельную плату тоже?) просто есть же на забугорных админках — вставка HTML кода, хотелось бы и себе такую сделать…

        d0s:
        31 Окт 2012 в 20:33

        Просто вопрос скорей в гибкости, если вы хотите в разных местах вставлять код — тогда нужно лесть в код — это гибкость, если вы хотите в конкретном месте — то можно сделать что-нибудь, но если использовать include, тогда какая разница, что вы заходите «Внешний Вид -> Настройки темы» и здесь вставляете код, что вам зайти «Внешний Вид -> Редактор» и в конкретный файл добавить код?.. Там в файле кроме вашего кода ничего нет, путь тот же самый, а вот геморроя меньше..))
        Если знать чего конкретно хотеть то за отдельную плату все можно сделать..)) На забугорных? Приведите пример хоть 1 шаблона где можно сделать вставку HTML кода, который работает на WP?..)) (я не говорю, что такое невозможно, хочу просто посмотреть как народ это делает)..)))

          Дима:
          31 Окт 2012 в 22:41

          Да, есть такой шаблон: resizable называется вот, кстати, ссылка на его описание — http://wpandyou.ru/shablony-wordpress/themejunkie/resizable-themejunkie-shablon-novostnogo-portala-na-wordpress/ там в админке можно в футере вставить HTML. как будет время — посмотрите, пожалуйста. если что-то сможете сделать — напишите сюда (и если это будет платно — напишите, сколько стоит :))))) )

          d0s:
          2 Ноя 2012 в 12:35

          Ну так косяк то у меня..)) нужно подправить слегка код..))

          Ищем

          1
          { update_option( $value['id'], $_REQUEST[ $value['id'] ]  ); }

          Заменяем на

          1
          2
          3
          4
          5
          {
                                                      if ($value['type'] == 'textarea' || $value['type'] == 'text' || $value['type'] == 'textlimit' || $value['type'] == 'upload') update_option( $value['id'], stripslashes($_REQUEST[$value['id']]) );
                                  elseif ($value['type'] == 'select') update_option( $value['id'], htmlspecialchars($_POST[$value['id']]) );
                                  else update_option( $value['id'], $_POST[ $value['id'] ]  );
                              }

          И радуемся..))

          Касаемо оплаты, ну сколько не жалко можете кинуть мне..))
          R276448689883
          Z353003927727

Дима:
5 Ноя 2012 в 13:48

d0s:

Ну так косяк то у меня..)) нужно подправить слегка код..))
Ищем

1{ update_option( $value[‘id’], $_REQUEST[ $value[‘id’] ]  ); }
Заменяем на
12345{
                                            if ($value[‘type’] == ‘textarea’ || $value[‘type’] == ‘text’ || $value[‘type’] == ‘textlimit’ || $value[‘type’] == ‘upload’) update_option( $value[‘id’], stripslashes($_REQUEST[$value[‘id’]]) );
                        elseif ($value[‘type’] == ‘select’) update_option( $value[‘id’], htmlspecialchars($_POST[$value[‘id’]]) );
                        else update_option( $value[‘id’], $_POST[ $value[‘id’] ]  );
                    }
И радуемся..))
Касаемо оплаты, ну сколько не жалко можете кинуть мне..))
R276448689883
Z353003927727

Спасибо, да, работает 🙂 Подкинул немного вмр на кошелек. Только вот ещё есть пару вопросов:
Если ввести, к примеру, и сохранить — картинка-то отобразится, но в админке этот путь пропадёт.
То есть, если ещё раз пересохранить настройки в админке — картинки не будет, так как путь стирается (скорее всего, из-за этих кавычек).
Не знаете, в чём дело? )

    d0s:
    6 Ноя 2012 в 0:23

    Спасибо.:-) знаю, «type» => «text» поменяйте на»type» => «textarea»
    И все будет хорошо 🙂

      Дима:
      8 Ноя 2012 в 0:27

      заменил type» => «textarea», но тогда пункт в админке просто исчезает 🙁

        d0s:
        8 Ноя 2012 в 21:52

        что-то не то заменили или не там должно быть так:

        1
        2
        3
        4
        5
        array(  "name" => "Меню",
               "desc" => "Описание меню..",
                    "id" => $shortname."_menu",
                    "std" => "",
                    "type" => "textarea",),
        1
        "type" => "textarea"

        P.S.

        Вообще, надо бы переписать данную статью, а то много есть изменений..

          Дима:
          9 Ноя 2012 в 21:58

          Нет, я всё заменил также, просто в админ-панели в «theme options» этот пункт сразу исчезает, если ввожу тип «textarea». (если просто «text» — тогда всё хорошо). ну ладно, вы уж не заморачивайтесь, а то и так много времени потратили на мой дурацкий вопрос 🙂

          d0s:
          10 Ноя 2012 в 14:29

          Ну, так конечно..))) Нужно добавить как это будет отображаться..)))
          Говорю же, тему нужно обновить..)) xD

          найти это

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          <?php } elseif ($value['type'] == "text") { ?>

              <tr valign="top">
                <th scope="row" style="font:bold 11px Verdana, Arial, Helvetica, sans-serif; padding-top:10px;"><?php echo $value['name']; ?>:</th>
                <td><input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?>" />
                  <br />
                  <small><?php echo $value['desc'] ; ?></small> </td>
              </tr>

              <?php } elseif ($value['type'] == "select") { ?>
              <tr valign="top">
                <th scope="row" style="font:bold 11px Verdana; padding-top:10px;"><?php echo $value['name']; ?>:</th>
                <td style="font:11px Verdana, Arial, Helvetica, sans-serif;"><select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
                   <?php foreach ($value['options'] as $option) {  ?>
                     <option<?php if ( get_option( $value['id'] )  == $option) { echo ' selected="selected"'; } elseif ($option ==  $value['std']) { echo ' selected="selected"'; } ?>><?php echo  $option; ?></option>
                    <?php } ?>
                  </select>
                  <br />
                  <small><?php echo $value['desc'] ; ?></small> </td>
              </tr>

          Заменить на это

          1
          2
          3
          4
          5
          6
          7
          8
          9
          10
          11
          12
          13
          14
          15
          16
          17
          18
          19
          20
          21
          22
          23
          24
          25
          26
          27
          28
          29
          30
          <?php } elseif ($value['type'] == "text") { ?>

              <tr valign="top">
                <th scope="row" style="font:bold 11px Verdana, Arial, Helvetica, sans-serif; padding-top:10px;"><?php echo $value['name']; ?>:</th>
                <td><input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?>" />
                  <br />
                  <small><?php echo $value['desc'] ; ?></small> </td>
              </tr>

              <?php } elseif ($value['type'] == "select") { ?>
              <tr valign="top">
                <th scope="row" style="font:bold 11px Verdana; padding-top:10px;"><?php echo $value['name']; ?>:</th>
                <td style="font:11px Verdana, Arial, Helvetica, sans-serif;"><select name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>">
                   <?php foreach ($value['options'] as $option) {  ?>
                     <option<?php if ( get_option( $value['id'] )  == $option) { echo ' selected="selected"'; } elseif ($option ==  $value['std']) { echo ' selected="selected"'; } ?>><?php echo  $option; ?></option>
                    <?php } ?>
                  </select>
                  <br />
                  <small><?php echo $value['desc'] ; ?></small> </td>
              </tr>


              <?php } elseif ($value['type'] == "textarea") { ?>

              <tr valign="top">
                <th scope="row" style="font:bold 11px Verdana, Arial, Helvetica, sans-serif; padding-top:10px;"><?php echo $value['name']; ?>:</th>
                <td><<?php echo $value['type']; ?> name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" /><?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?></textarea>
                  <br />
                  <small><?php echo $value['desc'] ; ?></small> </td>
              </tr>

          И кстати я разобрался почему такое происходит с кавычками, когда используешь type=text

          так как в коде написано:

          1
          <input name="<?php echo $value['id']; ?>" id="<?php echo $value['id']; ?>" type="<?php echo $value['type']; ?>" value="<?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?>" />

          нас интересует то место где отображается текст это

          1
          value="<?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?>"

          как мы видим текст который будет идти в поле выделен кавычками, поэтому мы и не можем в самом тексте использовать кавычки.. Если значение value= взять не в двойные, а в одинарные кавычки, так:

          1
          value='<?php if ( get_option( $value['id'] ) != "") { echo get_option( $value['id'] ); } else { echo $value['std']; } ?>'

          тогда мы сможем использовать двойные кавычки при type=text, но не сможем использовать одинарные.. по другому никак или одно или другое..

          А с type=textarea там не используются кавычки, поэтому мы можем туда запихать все что угодно..

          Все в порядке, я отвечаю только тогда когда могу..)) Да и вы мне дали стимул вам отвечать 😉

Дима:
10 Ноя 2012 в 21:13

Вот, теперь работает всё отлично 🙂 спасибо большое 😉

Мария:
25 Июн 2014 в 0:47

Здравствуйте, а можите віложить полностью файлЫ?
Спасибо