<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Очередной блог фрилансера &#187; wordpress</title>
	<atom:link href="http://dreamhelg.ru/category/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://dreamhelg.ru</link>
	<description>о моей работе в сети и не только</description>
	<lastBuildDate>Mon, 14 May 2012 19:53:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>WordPress. Создаем блок «Интересные статьи»</title>
		<link>http://dreamhelg.ru/2011/07/wordpress-howto-create-block-feature-arcticles/</link>
		<comments>http://dreamhelg.ru/2011/07/wordpress-howto-create-block-feature-arcticles/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 05:35:33 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2163</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2011/07/home.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Меня часто спрашивают читатели, как именно реализован блок «Интересные статьи» у меня на сайте. Никакого секрета тут нет, я использую бесплатный шаблон, и этот блок шел с ним в комплекте, так что любой желающий, может скачать тему и посмотреть.

Для того чтобы статья попала в блок, ее необходимо специально отметить, в моем шаблоне это реализовано с помощью плагина <a href="http://www.bioxd.com/featureme/">FeatureMe</a>. Затем происходит выборка отмеченных статей, и их отображение в блоке. Хочу заметить, что это далеко не единственный способ решения задачи, и сегодня я расскажу как сделать такой блок используя встроенные средства вордпресс.<span id="more-2163"></span>

Для примера, я выбрала простую и аккуратную тему <a href="http://tweaker.co.za/free-wordpress-themes/tweaker3/">tweaker3</a>, с минимальным дизайном.

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image1.jpg"><img class="aligncenter size-medium wp-image-2167" title="image1" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image1-300x170.jpg" alt="" width="300" height="170" /></a>
<h3>1. Создание отметок для записей</h3>
Прежде всего, нам необходимо иметь возможность отмечать нужные записи для вывода в блок. С этой задачей нам помогут справиться произвольные поля вордпресс. Использовать их очень просто, достаточно придумать название для своего поля, и указать его значение.

Произвольные поля находятся на странице редактирования записи, однако в новых версиях вордпресс они по умолчанию скрыты, так что если вдруг вы их не видите, нажмите на кнопку «Настройки экрана», и укажите соответствующую галочку:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image2.jpg"><img class="aligncenter size-medium wp-image-2168" title="image2" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image2-300x233.jpg" alt="" width="300" height="233" /></a>

Вводим название нашего поля <strong>featrue</strong>, со значением <strong>on</strong>, поскольку наше поле будет в виде флажка, и нажимаем кнопку «Добавить произвольное поле». Соответственно, если featrue = on, значит статья выводится в блоке:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image3.jpg"><img class="aligncenter size-medium wp-image-2169" title="image3" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image3-300x137.jpg" alt="" width="300" height="137" /></a>

После этой нехитрой процедуры, произвольное поле запишется в базу данных, и вы сможете использовать его в новых записях, просто выбрав из списка:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image4.jpg"><img class="aligncenter size-medium wp-image-2170" title="image4" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image4-300x99.jpg" alt="" width="300" height="99" /></a>

В принципе, этого уже достаточно, чтобы выбирать статьи для блока. Но я считаю, что такой способ отметки статей не очень удобен, поэтому мы пойдем дальше и сделаем удобную обертку для нашего поля, в виде чекбокса.

Далее вся работа у нас пойдет в файле темы <em>functions.php</em>. Открывайте его, и вставляйте следующий код:

[php]
/*Feature Custom Field*/
function feature_customfield(){
}

function admin_init(){
   add_meta_box('feature', 'Интересные статьи', 'feature_customfield', 'post', 'normal', 'low');
}

add_action('admin_init', 'admin_init');
[/php]

Функция <em>feature_customfield()</em> отвечает за вывод значения поля, мы добавим ее содержимое на следующем этапе.

Функция <em>admin_init()</em> выступает в роли контейнера для функции <em>add_meta_box()</em>, которая в свою очередь добавляет блок <strong>feature</strong> на страницу редактирования записи. В двух словах опишу параметры функции:
<ul>
	<li><em>feature</em> – название выводимого блока</li>
	<li><em>"Интересные статьи"</em> - заголовок блока</li>
	<li><em>feature_customfield</em> – название функции, отвечающей за вывод блока</li>
	<li><em>post</em> – вид контента для которого будет выведен блок на странице редактирования, может быть записью, страницей, ссылкой, или пользовательским типом данных.</li>
	<li><em>normal</em> – место вывода блока, указав side можно вывести блок в боковой колонке</li>
	<li><em>low</em> – приоритет вывода блока на странице, поскольку у нас значение low, блок выводится в самом конце, после всех остальных.</li>
</ul>
Последняя строчка отвечает за выполнение функции добавления блока, при инициировании административной панели. Можете проверить страницу редактирования записи, если вы все сделали правильно, то должны увидеть вот такой блок:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image5.jpg"><img class="aligncenter size-medium wp-image-2171" title="image5" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image5-300x166.jpg" alt="" width="300" height="166" /></a>Пока что у нас есть только заголовок блока, но мы сейчас это исправим. Помните пустую функцию <em>feature_customfield()</em>? Она как раз и будет отвечать за наполнение блока и отображение сохраненного значения. Вставьте внутри функции следующий код:

[php]
global $post;
$custom = get_post_custom($post-&amp;gt;ID);

if($custom['feature'][0] == 'on'){
   $value = 'checked';
}else{
   $value = '';
}

echo &quot;&lt;input type='checkbox' $value /&gt;&quot;;
echo &quot; Вывести запись в блоке интересных статей&quot;;
}
[/php]
Здесь мы сначала объявляем глобальную переменную <em>$post</em>, для доступа к нашей текущей записи, и получаем значение произвольного поля <strong>feature</strong> (если оно установлено). Далее проверяем его значение, если оно равно <strong>on</strong> (как в нашем примере), то присваиваем переменной <em>$value</em> значение <strong>checked</strong>. Все это делается для того, чтобы правильно отобразить в нашем поле, ранее сохраненное значение.

Последние две строчки выводят наше поле, с небольшим комментарием. Теперь наш блок выглядит вот так:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image6.jpg"><img class="aligncenter size-medium wp-image-2172" title="image6" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image6-300x169.jpg" alt="" width="300" height="169" /></a>

Осталось совсем немного — сделать так, чтобы статус поля сохранялся после обновления записи. Для этого нам понадобится еще одна функция с экшеном:

[php]
function update_featurecustomfield(){
 global $post;
 update_post_meta($post-&amp;gt;ID, 'feature', $_POST['feature']);
}
add_action('save_post', 'update_featurecustomfield');
[/php]

Здесь просто обновляем значение произвольного поля на указанное в чекбоксе. Последняя строчка отвечает за выполнение этой функции при сохранении записи. Весь код полностью будет выглядеть вот так:

[php]
/*Feature Custom Field*/
function feature_customfield(){
  global $post;
  $custom = get_post_custom($post-&amp;gt;ID);
  
  if($custom['feature'][0] == 'on'){
      $value = 'checked';
  }else{
      $value = '';
}
  echo &quot;&amp;lt;input type='checkbox' name='feature' $value /&amp;gt;&quot;;
  echo &quot; Вывести запись в блоке интересных статей&quot;;
}

function admin_init(){
  add_meta_box('feature', 'Интересные статьи', 'feature_customfield', 'post', 'normal', 'low');
}

function update_featurecustomfield(){
  global $post;
  update_post_meta($post-&amp;gt;ID, 'feature', $_POST['feature']);
}
add_action('save_post', 'update_featurecustomfield');
add_action('admin_init', 'admin_init');
[/php]

Теперь произвольные поля можно спрятать за ненадобностью, и полюбоваться на наш полностью работающий блок:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image7.jpg"><img class="aligncenter size-medium wp-image-2173" title="image7" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image7-300x258.jpg" alt="" width="300" height="258" /></a>

<h3>2. Вывод отмеченных записей в шаблон</h3>
После того, как у нас все заработало в админке, неплохо было бы иметь возможность вывести отмеченные записи в шаблон. С этой задачей легко справится отдельный цикл вывода записей. Отркываем <em>header.php</em> (или любой другой шаблон, в котором вы планируете разместить блок), и вставляем следующий код:

[html]
&lt;div id=&quot;feature-posts&quot;&gt;
   &lt;?php $feature_posts = new WP_Query('showposts=5&amp;meta_key=feature&amp;meta_value=on'); ?&gt;
   &lt;?php while($feature_posts-&gt;have_posts()): $feature_posts-&gt;the_post(); ?&gt;
      &lt;div class=&quot;feature-item&quot;&gt;
           &lt;a href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;
           &lt;?php the_excerpt(); ?&gt;
           &lt;a class=&quot;more-link&quot; href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;Читать далее...&lt;/a&gt;
      &lt;/div&gt;
   &lt;?php endwhile; ?&gt;
&lt;/div&gt;
[/html]

Здесь мы создаем новый объект класса <em>WP_Query</em>, со следующими параметрами:
<ul>
	<li><em>showposts</em> – количество выводимых записей, в нашем случае 5</li>
	<li><em>meta_key</em> — название произвольного поля</li>
	<li><em>meta_value</em> – значение произвольного поля</li>
</ul>
В результате цикла у нас выводятся пять записей, с заголовком, цитатой и ссылкой «читать далее». Обратите внимание, что каждая запись обернута в индивидуальный блок с классом <em>feature-item,</em> а все эти блоки содержаться внутри блока <em>feature-posts</em>. Такая разметка необходима для правильной работы яваскрипт-слайдера.

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image8.jpg"><img class="aligncenter size-medium wp-image-2174" title="image8" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image8-300x179.jpg" alt="" width="300" height="179" /></a>

Осталось совсем немного — сделать для записей красивую обертку.
<h3>3. Выбор слайдера</h3>
Слайдеров на яваскрипте написано бесчисленное множество, можно выбрать на любой вкус. Я предпочитаю <a href="http://jquery.malsup.com/cycle/">jQuery Cycle Plugin</a>, поскольку он не требователен к разметке, а также имеет множество настроек.

Для начала необходимо убедиться, что к вашей теме <a title="Подключение JQuery в WordPress (правильный способ)" href="http://dreamhelg.ru/2009/06/include-jquery-in-wordpress/">подключен jQuery</a>, и если его еще нет, необходимо это исправить. В моей теме jQuery уже используется, поэтому мне остается только подключить сам плагин. Скачиваем полную версию плагина с официальной страницы, сохраняем в папку js внутри шаблона, и подключаем на страницу <em>header.php</em> сразу после функции <em>wp_head()</em>.

[php]
&lt;?php wp_head(); ?&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo('template_url'); ?&gt;/js/cycle.js&quot;&gt;&lt;/script&gt;  
[/php]

Далее, здесь же вставляем вызов слайдера, перед тегом <em>body</em>

[javascript]
&lt;script type=&quot;text/javascript&quot;&gt;
    jQuery(document).ready(function(){
        jQuery(&quot;#feature-posts&quot;)
                .after('&lt;div id=&quot;nav&quot;&gt;') 
                .cycle({
                    fx:     'scrollLeft', 
                    speed:  'fast', 
                    timeout: 0, 
                    pager:  '#nav'         
                })
    })
&lt;/script&gt;    
[/javascript]

Теперь наш блок выглядит вот так:

<h3><a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image9.jpg"><img class="aligncenter size-medium wp-image-2175" title="image9" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image9-300x75.jpg" alt="" width="300" height="75" /></a></h3>

<h3>4. Настройка стилей</h3>
Я не буду подробно останавливаться на каждом стиле, думаю любой человек знакомый с CSS все поймет. Единственное, что следует отметить, html-разметка была немного изменена. В частности, был добавлен еще один оборачивающий контейнер и заголовок <em>h2</em>:

[html]
&lt;div id=&quot;feature-container&quot;&gt;
   &lt;h2&gt;Интересные статьи&lt;/h2&gt;
   &lt;div id=&quot;feature-posts&quot;&gt;
       &lt;?php $feature_posts = new WP_Query('showposts=5&amp;meta_key=feature&amp;meta_value=on'); ?&gt;
       &lt;?php while($feature_posts-&gt;have_posts()): $feature_posts-&gt;the_post(); ?&gt;
           &lt;div class=&quot;feature-item&quot;&gt;
               &lt;a href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;
               &lt;?php the_excerpt(); ?&gt;
               &lt;a class=&quot;more-link&quot; href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;Читать далее...&lt;/a&gt;
           &lt;/div&gt;
      &lt;?php endwhile; ?&gt;
   &lt;/div&gt;
&lt;/div&gt;
[/html]

Это не обязательные дополнения, так что без них вполне можно обойтись. Вот такие стили я использовала для нашего слайдера:

[css]
*Feature Articles*/
#feature-container{
    margin-bottom: 15px;
    width: 620px;
    color: #fff;
    position: relative;
}


#feature-container a{
    color: #fff;
}


#feature-container h2{
    color: #90CACC;
    font-weight: normal;
    background: #444444;
    margin-bottom: 0;
    padding: 10px 20px;
    -webkit-border-top-left-radius: 15px;
    -webkit-border-top-right-radius: 15px;
    -moz-border-radius-topleft: 15px;
    -moz-border-radius-topright: 15px;
    border-top-left-radius: 15px;
    border-top-right-radius: 15px;
}

#feature-posts{
   width: 600px;
   height: 100px;
   padding: 10px;
   background: #444444;
}

.feature-item{
    padding: 0 20px;
    overflow: hidden;
}


#feature-container #nav{
    font-family: Verdana;
}

#feature-container #nav a{
    color: #fff;
    background: #666666;
    padding:  7px 10px;
    text-align: center;
    margin-right: 1px;
}

#feature-container #nav a.activeSlide{
    background: #444444;
}
[/css]

В результате блок выглядит вот так:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image10.jpg"><img class="aligncenter size-medium wp-image-2165" title="image10" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image10-300x130.jpg" alt="" width="300" height="130" /></a>

<h3>5. Сокращение длины цитаты</h3>

Уже под конец написания статьи, я вспомнила об одной возможной проблеме. Дело в том, что анонс статьи в блоке выводится с помощью темлейтного тэга <em>the_excerpt()</em> (цитата). По умолчанию, если вы специально не указали отдельную цитату для записи, его длина равна 55 символам, что в моем примере не очень удобно, поскольку блок по высоте не рассчитан на такой объем текста. Решение довольно простое, можно изменить дефолтную длину цитаты, на нужное количество символов, для этого вставьте следующий код в <em>functions.php</em>:

[php]
function new_excerpt_length($length) {
   return 20;
}
add_filter('excerpt_length', 'new_excerpt_length');
[/php]

Строчка <em>return </em> возвращает количество символов цитаты, в моем случае 20.

Вот собственно и все, надеюсь приведенный пример будет вам полезен.
<a href="/dreamhelg.ru/wp-content/uploads/2011/07/tweaker3.zip">Архив с примером</a>.]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/07/wordpress-howto-create-block-feature-arcticles/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>WordPress. Функции базы данных</title>
		<link>http://dreamhelg.ru/2010/12/wordpress-database-functions/</link>
		<comments>http://dreamhelg.ru/2010/12/wordpress-database-functions/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 11:09:27 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wpdb]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2104</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/12/home.jpg" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p><p>В wordpress существует достаточно обширный класс, предоставляющий набор методов для эффективной работы с базой данных. Вы можете найти описание этого класса а также всех его методов в файле /wp-includes/wp-db.php. В сегодняшней статье будут рассмотрены наиболее важные из этих методов, и небольшие примеры их использования. Важно умение использовать возможности класса $wpdb, для безопасной работы плагинов.</p><span id="more-2104"></span>  
<p>В статье будут приведены примеры использования следующих шести методов:</p>  
<ul>
<li><strong>insert($table, $data, $format)</strong> – вставляет строку в таблицу через массивы.</li>    <li><strong>update($table, $data, $where, $format, $where_format)</strong> – обновляет строку в таблице через массивы.</li>
<li><strong>get_var($query, $x, $y)</strong> – получает одиночную переменную из базы данных.</li>
<li><strong>query($query)</strong> — выполняет MySQL-запрос к базе данных, с текущим подключением.</li>
<li><strong>get_results($query, $output)</strong> – получает данные SQL-запроса из базы данных (одну или множество строк).</li>
<li><strong>escape($data)</strong> – Экранирует контент для вставки в базу данных, используя метод <strong>addslashes()</strong> для безопасности.</li>
</ul>  

<p>Кроме этого, есть еще несколько интересных методов:</p>  <ul>
<li><strong>set_prefix($prefix)</strong> – используется для установления префикса wordpress-таблиц, также может быть использован для переопределения префикса в любое время.</li>
<li><strong>prepare($query)</strong> – безопасно подготавливает SQL-запрос к выполнению, с помощью sprint()-подобного синтаксиса.</li>
<li><strong>get_row($query, $output, $y)</strong> – получает одиночную запись из базы данных.</li>    <li><strong>get_col($query, $x)</strong> – получает одиночную колонку из базы данных в формате массива.</li> 
</ul>  
[code lang="php"]
/**
 * insert
 */
$wpdb-&gt;insert( $wpdb-&gt;posts, array( 'post_title' =&gt; $mytitle ) );
 
$wpdb-&gt;insert( $wpdb-&gt;options, array(
            'option_name',
            'new_option_key',
            'option_value' =&gt; 'New Option Value',
            'autoload' =&gt; 'yes' )
            );
 
/**
 * update
 */
$wpdb-&gt;update( $wpdb-&gt;posts, array( 'post_title' =&gt; $mytitle ),
            array( 'ID' =&gt; $myid )
            );
 
$wpdb-&gt;update( $wpdb-&gt;options,
            array( 'option_value' =&gt; 'New Option Value' ),
            array( 'option_name' =&gt; 'new_option_value' )
            );
 
/**
 * get_var
 */
$post_id = $wpdb-&gt;get_var(
            $wpdb-&gt;prepare( &quot;SELECT post_id FROM
                    $wpdb-&gt;postmeta WHERE
                    post_id = %d AND
                    meta_key = 'enclosure' AND
                    meta_value LIKE (%s)&quot;, $post_ID, $url . '&amp;' )
            );
 
$content = $wpdb-&gt;get_var(
            $wpdb-&gt;prepare(&quot;SELECT post_content FROM &quot; .
                    &quot;$wpdb-&gt;posts WHERE &quot; .
                    &quot;post_title = %s AND &quot; .
                    &quot;ID = %d&quot;, $title, $id )
        );
 
/**
 * query
 */
$wpdb-&gt;query( &quot;DELETE FROM $wpdb-&gt;options WHERE option_name = '$name'&quot; );
 
$wpdb-&gt;query( &quot;UPDATE $wpdb-&gt;posts SET post_title = '$mytitle' WHERE ID = $myid&quot; );
 
/**
 * query and escape
 */
$mytitle = $wpdb-&gt;escape( $mytitle );
$myid    = absint( $myid );
$wpdb-&gt;query( &quot;UPDATE $wpdb-&gt;posts SET post_title = '$mytitle' WHERE ID = $myid&quot; );
 
/**
 * get_results
 */
$type = $wpdb-&gt;get_results( &quot;SELECT post_type FROM &quot; .
                &quot;$wpdb-&gt;posts WHERE ID=$id&quot; );
[/code]

<p>Перевод статьи “<a href="http://wpengineer.com/1746/wordpress-database-functions/">WordPress Database Functions”</a>.</p>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/12/wordpress-database-functions/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>WordPress. Создаем встроенную форму обратной связи</title>
		<link>http://dreamhelg.ru/2010/06/wordpress-create-built-in-contact-form/</link>
		<comments>http://dreamhelg.ru/2010/06/wordpress-create-built-in-contact-form/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 06:30:45 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2079</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/06/home2.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Множество существующих плагинов wordpress позволяют встраивать форму обратной связи на ваш блог, но использование плагинов – не обязательное условие. В сегодняшней статье, вы узнаете как создать встроенную контактную форму, с помощью собственной WordPress-темы.<span id="more-2079"></span>
<br/>
Пример такой формы можно найти на сайте <a href="http://www.phpsnippets.info/">PHP Snippets</a>, там она выглядит следующим образом:

<a href="http://dreamhelg.ru/wp-content/uploads/2010/06/contact.jpg"><img class="aligncenter size-full wp-image-2082" title="contact" src="http://dreamhelg.ru/wp-content/uploads/2010/06/contact.jpg" alt="" width="462" height="357" /></a>
<h3>Шаг 1: Создание шаблона</h3>
Сначала, нам понадобится создать шаблон страницы. Для этого, скопируйте содержимое файла <em>page.php</em> в новый файл, и сохраните его под именем <em>page-contact.php.</em>

Для того, чтобы WordPress определил наш файл как шаблон, нам нужно добавить комментарий, следующего вида:

[php]
&lt;?php
/*
Template Name: Contact
*/
?&gt;
[/php]

В результате наш файл <em>page-contact.php</em> должен выглядеть вот так:

[php]
&lt;?php
/*
Template Name: Contact
*/
?&gt;

&lt;?php get_header() ?&gt;

	&lt;div id=&quot;container&quot;&gt;
		&lt;div id=&quot;content&quot;&gt;
			&lt;?php the_post() ?&gt;
			&lt;div id=&quot;post-&lt;?php the_ID() ?&gt;&quot; class=&quot;post&quot;&gt;
				&lt;div class=&quot;entry-content&quot;&gt;
				&lt;/div&gt;&lt;!-- .entry-content -&gt;
			&lt;/div&gt;&lt;!-- .post--&gt;
		&lt;/div&gt;&lt;!-- #content --&gt;
	&lt;/div&gt;&lt;!-- #container --&gt;

&lt;?php get_sidebar() ?&gt;
&lt;?php get_footer() ?&gt;
[/php]

<h3>Шаг 2: Создание формы</h3>
Теперь, создадим простую форму обратной связи. Просто вставьте приведенный код внутри блока <em>entry-content.</em>

[php]
&lt;form action=&quot;&lt;?php the_permalink(); ?&gt;&quot; id=&quot;contactForm&quot; method=&quot;post&quot;&gt;
	&lt;ul&gt;
		&lt;li&gt;
			&lt;label for=&quot;contactName&quot;&gt;Name:&lt;/label&gt;
			&lt;input type=&quot;text&quot; name=&quot;contactName&quot; id=&quot;contactName&quot; value=&quot;&quot; /&gt;
		&lt;/li&gt;
		&lt;li&gt;
			&lt;label for=&quot;email&quot;&gt;Email&lt;/label&gt;
			&lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot; value=&quot;&quot; /&gt;
		&lt;/li&gt;
		&lt;li&gt;
			&lt;label for=&quot;commentsText&quot;&gt;Message:&lt;/label&gt;
			&lt;textarea name=&quot;comments&quot; id=&quot;commentsText&quot; rows=&quot;20&quot; cols=&quot;30&quot;&gt;&lt;/textarea&gt;
		&lt;/li&gt;
		&lt;li&gt;
			&lt;button type=&quot;submit&quot;&gt;Send email&lt;/button&gt;
		&lt;/li&gt;
	&lt;/ul&gt;
	&lt;input type=&quot;hidden&quot; name=&quot;submitted&quot; id=&quot;submitted&quot; value=&quot;true&quot; /&gt;
&lt;/form&gt;
[/php]

Код формы очень простой, и не нуждается в разъяснениях. Обратите внимания на  тэг <em>input type=”hidden”, </em>добавленный в строке 19 – позже, он будет использоваться для проверки была ли отправлена форма.

<h3>Шаг 3: Обработка данных и ошибок</h3>
Наша форма выглядит прекрасно, но пока что является бесполезной, поскольку не отправляет сообщения. Прежде всего, перед отправкой сообщения, нам нужно проверить была ли отправлена форма, и правильно ли заполнены все поля.

Если поля заполнены правильно, мы получаем почтовый адрес администратора блога и отправляем ему сообщение. Если поля заполнены частично или с ошибками, сообщение не отправляется, и пользователю выводится список ошибок.

Вставьте следующий код между комментарием с названием шаблона и функцией <em>get_header()</em>.

[php]
&lt;?php
if(isset($_POST['submitted'])) {
	if(trim($_POST['contactName']) === '') {
		$nameError = 'Please enter your name.';
		$hasError = true;
	} else {
		$name = trim($_POST['contactName']);
	}

	if(trim($_POST['email']) === '')  {
		$emailError = 'Please enter your email address.';
		$hasError = true;
	} else if (!eregi(&quot;^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$&quot;, trim($_POST['email']))) {
		$emailError = 'You entered an invalid email address.';
		$hasError = true;
	} else {
		$email = trim($_POST['email']);
	}

	if(trim($_POST['comments']) === '') {
		$commentError = 'Please enter a message.';
		$hasError = true;
	} else {
		if(function_exists('stripslashes')) {
			$comments = stripslashes(trim($_POST['comments']));
		} else {
			$comments = trim($_POST['comments']);
		}
	}

	if(!isset($hasError)) {
		$emailTo = get_option('tz_email');
		if (!isset($emailTo) || ($emailTo == '') ){
			$emailTo = get_option('admin_email');
		}
		$subject = '[PHP Snippets] From '.$name;
		$body = &quot;Name: $name \n\nEmail: $email \n\nComments: $comments&quot;;
		$headers = 'From: '.$name.' &lt;'.$emailTo.'&gt;' . &quot;\r\n&quot; . 'Reply-To: ' . $email;

		mail($emailTo, $subject, $body, $headers);
		$emailSent = true;
	}

} ?&gt;
[/php]

В этом коде, проверяется отправка формы и корректное заполнение полей. Если появляются ошибки, в виде пустого поля или неправильно указанного почтового адреса, формируется сообщение об ошибке и форма не отправляется.

Теперь, нам нужно отобразить сообщение об ошибке, рядом с нужным полем, например “Пожалуйста, введите имя”.  <strong>Ниже приведен полный код шаблона, который вы можете использовать в своей теме.</strong>

[php]
&lt;?php
/*
Template Name: Contact
*/
?&gt;

&lt;?php
if(isset($_POST['submitted'])) {
	if(trim($_POST['contactName']) === '') {
		$nameError = 'Please enter your name.';
		$hasError = true;
	} else {
		$name = trim($_POST['contactName']);
	}

	if(trim($_POST['email']) === '')  {
		$emailError = 'Please enter your email address.';
		$hasError = true;
	} else if (!eregi(&quot;^[A-Z0-9._%-]+@[A-Z0-9._%-]+\.[A-Z]{2,4}$&quot;, trim($_POST['email']))) {
		$emailError = 'You entered an invalid email address.';
		$hasError = true;
	} else {
		$email = trim($_POST['email']);
	}

	if(trim($_POST['comments']) === '') {
		$commentError = 'Please enter a message.';
		$hasError = true;
	} else {
		if(function_exists('stripslashes')) {
			$comments = stripslashes(trim($_POST['comments']));
		} else {
			$comments = trim($_POST['comments']);
		}
	}

	if(!isset($hasError)) {
		$emailTo = get_option('tz_email');
		if (!isset($emailTo) || ($emailTo == '') ){
			$emailTo = get_option('admin_email');
		}
		$subject = '[PHP Snippets] From '.$name;
		$body = &quot;Name: $name \n\nEmail: $email \n\nComments: $comments&quot;;
		$headers = 'From: '.$name.' &lt;'.$emailTo.'&gt;' . &quot;\r\n&quot; . 'Reply-To: ' . $email;

		mail($emailTo, $subject, $body, $headers);
		$emailSent = true;
	}

} ?&gt;
&lt;?php get_header(); ?&gt;
	&lt;div id=&quot;container&quot;&gt;
		&lt;div id=&quot;content&quot;&gt;

			&lt;?php if (have_posts()) : while (have_posts()) : the_post(); ?&gt;
			&lt;div &lt;?php post_class() ?&gt; id=&quot;post-&lt;?php the_ID(); ?&gt;&quot;&gt;
				&lt;h1 class=&quot;entry-title&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/h1&gt;
					&lt;div class=&quot;entry-content&quot;&gt;
						&lt;?php if(isset($emailSent) &amp;&amp; $emailSent == true) { ?&gt;
							&lt;div class=&quot;thanks&quot;&gt;
								&lt;p&gt;Thanks, your email was sent successfully.&lt;/p&gt;
							&lt;/div&gt;
						&lt;?php } else { ?&gt;
							&lt;?php the_content(); ?&gt;
							&lt;?php if(isset($hasError) || isset($captchaError)) { ?&gt;
								&lt;p class=&quot;error&quot;&gt;Sorry, an error occured.&lt;p&gt;
							&lt;?php } ?&gt;

						&lt;form action=&quot;&lt;?php the_permalink(); ?&gt;&quot; id=&quot;contactForm&quot; method=&quot;post&quot;&gt;
							&lt;ul class=&quot;contactform&quot;&gt;
							&lt;li&gt;
								&lt;label for=&quot;contactName&quot;&gt;Name:&lt;/label&gt;
								&lt;input type=&quot;text&quot; name=&quot;contactName&quot; id=&quot;contactName&quot; value=&quot;&lt;?php if(isset($_POST['contactName'])) echo $_POST['contactName'];?&gt;&quot; class=&quot;required requiredField&quot; /&gt;
								&lt;?php if($nameError != '') { ?&gt;
									&lt;span class=&quot;error&quot;&gt;&lt;?=$nameError;?&gt;&lt;/span&gt;
								&lt;?php } ?&gt;
							&lt;/li&gt;

							&lt;li&gt;
								&lt;label for=&quot;email&quot;&gt;Email&lt;/label&gt;
								&lt;input type=&quot;text&quot; name=&quot;email&quot; id=&quot;email&quot; value=&quot;&lt;?php if(isset($_POST['email']))  echo $_POST['email'];?&gt;&quot; class=&quot;required requiredField email&quot; /&gt;
								&lt;?php if($emailError != '') { ?&gt;
									&lt;span class=&quot;error&quot;&gt;&lt;?=$emailError;?&gt;&lt;/span&gt;
								&lt;?php } ?&gt;
							&lt;/li&gt;

							&lt;li&gt;&lt;label for=&quot;commentsText&quot;&gt;Message:&lt;/label&gt;
								&lt;textarea name=&quot;comments&quot; id=&quot;commentsText&quot; rows=&quot;20&quot; cols=&quot;30&quot; class=&quot;required requiredField&quot;&gt;&lt;?php if(isset($_POST['comments'])) { if(function_exists('stripslashes')) { echo stripslashes($_POST['comments']); } else { echo $_POST['comments']; } } ?&gt;&lt;/textarea&gt;
								&lt;?php if($commentError != '') { ?&gt;
									&lt;span class=&quot;error&quot;&gt;&lt;?=$commentError;?&gt;&lt;/span&gt;
								&lt;?php } ?&gt;
							&lt;/li&gt;

							&lt;li&gt;
								&lt;input type=&quot;submit&quot;&gt;Send email&lt;/input&gt;
							&lt;/li&gt;
						&lt;/ul&gt;
						&lt;input type=&quot;hidden&quot; name=&quot;submitted&quot; id=&quot;submitted&quot; value=&quot;true&quot; /&gt;
					&lt;/form&gt;
				&lt;?php } ?&gt;
				&lt;/div&gt;&lt;!-- .entry-content --&gt;
			&lt;/div&gt;&lt;!-- .post --&gt;

				&lt;?php endwhile; endif; ?&gt;
		&lt;/div&gt;&lt;!-- #content --&gt;
	&lt;/div&gt;&lt;!-- #container --&gt;

&lt;?php get_sidebar(); ?&gt;
&lt;?php get_footer(); ?&gt;
[/php]

<h3>Шаг 4: Добавляем проверку jQuery</h3>
Наша форма уже работает прекрасно, но мы можем улучшить ее, добавив проверку на клиенте. Для этого, мы будем использовать jQuery и плагин <a href="http://docs.jquery.com/Plugins/Validation">jQuery Validation</a>. Это отличный плагин, позволяющий легко и быстро проверить правильное заполнение полей.

C<a href="http://docs.jquery.com/Plugins/Validation">качайте плагин</a> и поместите его в папку с вашей темой, внутри папки <em>/js. </em>После этого, вставьте следующие строки в новый файл:

[javascript]
$(document).ready(function(){
	$(&quot;#contactForm&quot;).validate();
});
[/javascript]

Сохраните файл под именем <em>verif.js</em> в папке <em>/js</em>.

Теперь, нам нужно подключить ява-скрипт файлы в нашу тему. Откройте файл <em>header.php</em> и вставьте следующий код внутри тэгов &lt;head&gt;&lt;/head&gt;:

[html]
&lt;?php if( is_page('contact') ){ ?&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo('template_directory'); ?&gt;/js/jquery.validate.min.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo('template_directory'); ?&gt;/js/verif.js&quot;&gt;&lt;/script&gt;
&lt;?php }?&gt;
[/html]

После этого, ваша форма будет проверяться плагином на клиентской стороне. Плагин работает довольно просто – выбирает элементы формы, имеющий css-класс <em>required</em> и проверяет их на корректное заполнение. В случае ошибки, отображается сообщение. Надеюсь, вам понравится ваша новая WordPress-форма.

Перевод статьи “<a href="http://www.catswhocode.com/blog/how-to-create-a-built-in-contact-form-for-your-wordpress-theme">How to create a built-in contact form for your WordPress theme</a>”, автор <strong>Jean-Baptiste Jung</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/06/wordpress-create-built-in-contact-form/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Введение в пользовательскую таксономию WordPress 3.0</title>
		<link>http://dreamhelg.ru/2010/05/intorducing-into-custom-taxonomy-wordpress-3-0/</link>
		<comments>http://dreamhelg.ru/2010/05/intorducing-into-custom-taxonomy-wordpress-3-0/#comments</comments>
		<pubDate>Fri, 14 May 2010 07:00:17 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[taxonomy]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2008</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/05/200x200.jpg" class="attachment-200x200 wp-post-image" alt="200x200" title="200x200" /></p>В WordPress 3.0 будут восполнены серьезные пробелы, благодаря чему, он станет гораздо более серьезной системой управления контентом. Довольно простая в использовании функция пользовательской таксономии, предоставит разработчикам сайта мощный инструмент для построения хорошей информационной архитектуры. В сегодняшней статье, вы узнаете что собой представляют таксономии, почему они полезны и как их можно использовать.<span id="more-2008"></span>
<h3>Что такое Таксономия?</h3>
Таксономии – это различные методы для классификации информации. В этой статье приведен пример записей о персональных компьютерах, которые можно классифицировать по целому ряду различных критериев, включая:
<ul>
	<li>Количество оперативной памяти</li>
	<li>Размер жесткого диска</li>
	<li>Скорость процессора</li>
	<li>Тип процессора</li>
	<li>Установленная операционная система</li>
	<li>и так далее…</li>
</ul>
<h3>Краткая история таксономии WordPress</h3>
<h4>Рубрики</h4>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/category_old.png"><img class="aligncenter size-full wp-image-2012" title="category_old" src="http://dreamhelg.ru/wp-content/uploads/2010/05/category_old.png" alt="" width="295" height="315" /></a>

До версии 2.3, в WordPress был только один тип таксономии для записей, под названием <strong>Рубрики</strong>. Это было удобно для блогов, а в нашем случае, нам пришлось бы создать рубрику верхнего уровня под названием “Персональные компьютеры”, затем дочернюю рубрику “Оперативная память”, которая, в свою очередь, может содержать такие дочерние рубрики как “Меньше 1Гб”, “1Гб”, “2Гб”, “4Гб” и так далее. Вторая дочерняя рубрика, от основной рубрики “Персональные компьютеры”, называлась бы “Операционная система” и содержала бы такие дочерние рубрики, как: “Windows XP”, “Mac OS”, “Red Hat”, “Ubuntu” и т.д.

Система, позволяющая иметь рубрики, состоящие из дочерних рубрик – называется иерархической структурой. До версии WordPress 2.3, создать серьезную информационную архитектуру сайта можно было только путем создания большой иерархии рубрик, в которой рубрики верхнего уровня представляли собой большие группы таксономий.
<h4>Метки</h4>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/tags.png"><img class="aligncenter size-full wp-image-2013" title="tags" src="http://dreamhelg.ru/wp-content/uploads/2010/05/tags.png" alt="" width="287" height="178" /></a>

Начиная с версии 2.3, в WordPress был добавлен второй вид таксономии под названием <strong>Метки</strong>. В отличие от рубрик, которые придумываются заранее, в зависимости от типа контента на сайте, метки предоставляют более свободный метод классификации контента.

Например, при создании записи о персональном компьютере, метки позволяют автору указать одно или несколько ключевых слов, таких как “игровой”, “шумный”, “офисный” и т.д. Эти ключевые слова конечно не несут такого смысла как рубрики, однако помогают добавить дополнительную классификацию к записи.

Посетители сайта, в дальнейшем, легко смогут найти все записи с меткой “шумный”. Однако, свободная форма меток, не поможет нам построить надежную классификационную систему на основе заранее известных значений, таких как типы операционной системы или процессора. Кроме того, метки являются одномерными, и не поддерживают иерархическую структуру.
<h3>Одноуровневые пользовательские таксономии</h3>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/04-custom-tax-1d.png"><img class="aligncenter size-full wp-image-2014" title="04-custom-tax-1d" src="http://dreamhelg.ru/wp-content/uploads/2010/05/04-custom-tax-1d.png" alt="" width="494" height="462" /></a>

Начиная с версии 2.8, в WordPress появляется возможность добавить пользовательские классификационные схемы, путем незначительных изменений в коде сайта. С помощью этой функции, вы можете построить список операционных систем, отдельно от списка типов оперативной памяти и т.д. Однако,  в версии 2.8 нет возможности создать иерархическую стркутуру таксономии, как у рубрик.
<h3>Иерархические пользовательские таксономии</h3>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/05-custom-tax-2d.png"><img class="aligncenter size-full wp-image-2015" title="05-custom-tax-2d" src="http://dreamhelg.ru/wp-content/uploads/2010/05/05-custom-tax-2d.png" alt="" width="292" height="242" /></a>

И наконец, WordPress 3.0, дает нам полностью иерархические пользовательские таксономии. Обратите внимание как иерархическое устройство позволяет упростить таксономию операционных систем, путем группировки всех вариантов операционной системы Windows в общей родительской рубрике “Windows”. Такая классификация позволит пользователям просматривать все компьютеры с ОС Windows, или например конкретные, с Windows XP.
<h3>Создание пользовательской Таксономии</h3>
<strong>Редактирование файла functions.php</strong>

В Wordpress 3.0 нет возможности создавать пользовательские таксономии в панели управления. Для начального описания вашей пользовательской таксономии без использования плагина, вам понадобится добавить немного кода в файл functions.php, расположенный в папке с вашей темой. Это совсем не сложно – просто следуйте приведенным примерам.
<h3>Добавляем Таксономии в коде</h3>
Итак, на примере персонального компьютера, мы добавим отдельные таксономии для Оперативной памяти, Жесткого диска и Операционной системы. На данном этапе, мы просто добавим таксономии сами по себе, как пустые контейнеры. К счастью, мы можем добавлять и управлять различными классификациями, не выходя из панели управления.

<strong>Шаг 1. Первая функция для создания всего</strong>

Для начала, нам нужно создать функцию, которая создает все необходимые нам таксономии. Назовем функцию “build_taxonomies”. Давайте добавим эту функцию в конец файла functions.php.

[php]
function build_taxonomies() {  
    // code will go here  
}  
[/php]

<strong>Шаг 2. Описание Таксономий</strong>

Далее, для каждой таксономии, которую мы создадим, нам нужно взывать определенную WordPress-функцию, с правильными параметрами. Далее представлена эта функция, и разъяснены ее важные параметры.

[php]
register_taxonomy(  
    'internal_name',  
    'object_type',  
    array(  
        'hierarchical' =&gt; {true|false},  
        'label' =&gt; 'Human Readable Name',  
        'query_var' =&gt; {true|false},  
        'rewrite' =&gt; {true|false}  
    )  
);  
[/php]

<ul>
	<li><strong>internal_name:</strong> название таксономии, которое будет использоваться в базе данных и файлах шаблона</li>
	<li><strong>object_type:</strong> определяет типы контента, к которым можно будет применить эту таксономию. Возможные значения: “post” (запись), “page” (страница), “link” (ссылка).</li>
	<li>Далее идет массив из опциональных параметров. В этой статье, мы будем использовать наиболее важные из них, а полный список можно найти в кодексе WordPress, на странице описания функции <a href="http://codex.wordpress.org/Function_Reference/register_taxonomy">register_taxonomy</a>. Далее идет список используемых параметров.</li>
	<li><strong>hierarchical</strong>: если значение установлено в “true”, эта таксономия будет иметь возможности иерархической структуры, как у Рубрик. Если значение “false”, то таксономия по структуре будет похожа на Метки.</li>
	<li><strong>label</strong>:  это читаемое название, которое будет использоваться в интерфейсе сайта для обозначения этой таксономии.</li>
	<li><strong>query_var</strong>: если значение параметра установлено в “true”, мы сможем получать записи, на основе выбранного значения этой таксономии. Например, можно найти все записи, для которых в таксономии “операционная система” указано значение “Windows”.</li>
	<li><strong>rewrite</strong>: если значение установлено в “true”, при просмотре страницы с этой таксономией, WordPress будет использовать дружественные URL. Например, страница, отображающая все записи с операционной системой “Windows”, будет представлена следующим url: http://domain.com/operating_system/windows</li>
</ul>
Код, добавляющий таксономию “Операционная система” выглядит следующим образом:

[php]
register_taxonomy( 'operating_system', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Operating System', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
[/php]

Вставьте эту функцию, внутри ранее созданной функции build_taxonomies.

<strong>Шаг 3 Вызов функции, создающей таксономию</strong>

Для того, чтобы наша функция build_taxonomies была выполнена, нам понадобится добавить одну строчку кода, в файле functions.php. Фактически мы “прицепим” функцию build_taxonomies к событию init, путем добавления следующего кода:

[php]
add_action( 'init', 'build_taxonomies', 0 ); 
[/php]

Вы можете вставить эту строчку в любом месте, в нашем примере она добавлена выше вызова функции build_taxonomies, поэтому код выглядит вот так:

[php]
// Custom Taxonomy Code  
add_action( 'init', 'build_taxonomies', 0 );  
  
function build_taxonomies() {  
    register_taxonomy( 'operating_system', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Operating System', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
}  
[/php]

<h3>Добавляем классификацию к новой Таксономии</h3>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/os.png"><img class="aligncenter size-full wp-image-2016" title="os" src="http://dreamhelg.ru/wp-content/uploads/2010/05/os.png" alt="" width="155" height="166" /></a>

Если вы правильно добавили таксономию “Операционная система” в файле functions.php, она должна появится в виде нового пункта, в блоке “Записи”, вашей панели управления. Кликните по нему, чтобы добавить необходимые классификации.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/os-category.jpg"><img class="aligncenter size-full wp-image-2017" title="os-category" src="http://dreamhelg.ru/wp-content/uploads/2010/05/os-category.jpg" alt="" width="618" height="425" /></a>

Теперь, вы можете добавлять и редактировать операционные системы, точно таким же образом, как Рубрики.
<h3>Добавляем больше Таксономий</h3>
Оставшиеся таксономии добавляем аналогичным способом, то есть для каждой таксономии в файле functions.php, создается своя функция register_taxonomy:

[php]
register_taxonomy( 'ram', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'RAM', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );
  
register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Hard Drive', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );
[/php]

После того, как вы добавите все таксономии, код должен выглядеть следующим образом:

[php]
// Custom Taxonomy Code  
add_action( 'init', 'build_taxonomies', 0 );  
  
function build_taxonomies() {  
register_taxonomy( 'operating_system', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Operating System', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
register_taxonomy( 'ram', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'RAM', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
register_taxonomy( 'hard_drive', 'post', array( 'hierarchical' =&gt; true, 'label' =&gt; 'Hard Drive', 'query_var' =&gt; true, 'rewrite' =&gt; true ) );  
}  
[/php]

<h3>Создание записи, с использованием новой Таксономии</h3>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/publish_post.jpg"><img class="aligncenter size-full wp-image-2018" title="publish_post" src="http://dreamhelg.ru/wp-content/uploads/2010/05/publish_post.jpg" alt="" width="636" height="476" /></a>

Создайте несколько записей, указав необходимую классификацию, в окне создания/редактирования записей, вы увидите панели вашей таксономии.
<h3>Отображение различной таксономии записей</h3>
Пока что ничего, из того что мы сделали, не доступно посетителям сайта. Следовательно, нам необходимо отобразить для каждой записи, название пользовательской таксономии, к которой она принадлежит.

Для этого, нам понадобится немного изменить цикл, в определенных файлах шаблона.
<h3>Вывод таксономии на индивидуальной странице</h3>
В дефолтной теме <em>Twenty Ten</em><em>, </em>как и во многих других темах WordPress, данные о рубрике и метках записи, выводятся непосредственно под текстом этой записи. Мы будем выводить нашу таксономию, если она существует, чуть выше блока рубрик с метками.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/taxonomy.jpg"><img class="aligncenter size-full wp-image-2019" title="taxonomy" src="http://dreamhelg.ru/wp-content/uploads/2010/05/taxonomy.jpg" alt="" width="702" height="262" /></a>

<strong>Шаг 1. Редактирование файла single.php</strong>

Шаблон индивидуальной записи называется single.php, и расположен он внутри папки с вашей темой. Если такого шаблона у вас нет, его можно создать, и скопировать в него содержимое файла index.php.

Найдите в шаблоне single.php строчку:

[html]
&lt;div class=&quot;entry-utility&quot;&gt; 
[/html]

В теме Twenty Ten, этот блок содержит название рубрик, метки, ссылки  и другую информацию о текущей записи. Код для вывода нашей таксономии, мы будем размещать непосредственно над этим блоком.

<strong>Шаг 2. Получение таксономии для текущей записи</strong>

Здесь мы определяем несколько переменных, для хранения вывода пользовательской таксономии.

[php]
&lt;?php  
// Эта переменная используется для вывода таксономии, если она существует
$taxo_text = &quot;&quot;;  
  
// Список переменных, для хранения списков таксономии
// Эта строка получает данные о классификации &quot;Операционная система&quot;
$os_list = get_the_term_list( $post-&gt;ID, 'operating_system', '&lt;strong&gt;Operating System(s):&lt;/strong&gt; ', ', ', '' );  
[/php]

Для получения информации о таксономии текущей записи, мы используем функцию get_the_term, со следующими параметрами:
<ul>
	<li><strong>$post-&gt;ID</strong> : id текущей записи</li>
	<li><strong>‘operation_system’</strong> : имя пользовательской таксономии. Мы проверяем, была ли назначена текущей записи, какая-либо классификация из пользовательской таксономии operation_system.</li>
	<li><strong>‘Операционная система (ы)’</strong> : если данные будут найдены, эта строчка будет вставлена, перед их выводом на экран.</li>
	<li><strong>‘, ’ </strong>:  если найденных значений будет несколько, то они будут разделены запятой</li>
	<li><strong>“ </strong>: если данные будут найдены, эта строка будет вставлена после вывода данных. В нашем случае, мы оставляем ее пустой.</li>
</ul>
Точно так же, используя эту функцию для двух других таксономий, мы получим код следующего вида:

[php]
$ram_list = get_the_term_list( $post-&gt;ID, 'ram', '&lt;strong&gt;RAM Option(s):&lt;/strong&gt; ', ', ', '' );  
$hd_list = get_the_term_list( $post-&gt;ID, 'hard_drive', '&lt;strong&gt;Hard Drive Option(s):&lt;/strong&gt; ', ', ', '' );  
[/php]

<strong>Шаг 3. Форматирование полученного результата</strong>

Проверяем результаты для каждой из трех возможных таксономий. Если результат есть, добавляем его к нашему выводу, вместе с тэгом перевода строки.

[php]
// Добавляем список ОС, если они указаны
if ( '' != $os_list ) {  
    $taxo_text .= &quot;$os_list&lt;br /&gt;\n&quot;;  
}  
// Добавляем данные об Оперативной памяти, если они указаны
if ( '' != $ram_list ) {  
    $taxo_text .= &quot;$ram_list&lt;br /&gt;\n&quot;;  
}  
// Добавляем данные о жестком диске, если они указаны
if ( '' != $hd_list ) {  
    $taxo_text .= &quot;$hd_list&lt;br /&gt;\n&quot;;  
}  
[/php]

<strong>Шаг 4. Выводим классификацию, если она найдена</strong>

Проверяем, была ли получена таксономия из предыдущих шагов. Если таксономия существует, выводим ее, предварительно обернув в div с классом “entry-utility”.

[php]
// Выводим пользовательскую таксономию, если она существует 
// Обратите внимание: Мы не будет открывать div, если у него не будет содержимого
if ( '' != $taxo_text ) {  
?&gt;  
&lt;div class=&quot;entry-utility&quot;&gt;  
&lt;?php  
echo $taxo_text;  
?&gt;  
&lt;/div&gt;  
&lt;?  
} // endif  
?&gt;  
[/php]

<strong>Шаг 5. Проверяем результаты</strong>

Теперь, если открыть страницу любой записи, вы должны увидеть пользовательскую классификацию, расположенную сразу после текста записи.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/taxonomy_2.jpg"><img class="aligncenter size-full wp-image-2020" title="taxonomy_2" src="http://dreamhelg.ru/wp-content/uploads/2010/05/taxonomy_2.jpg" alt="" width="659" height="277" /></a>

<h3>Просмотр списка записей, построенный на основе пользовательской таксономии</h3>
Теперь, на странице индивидуальной записи, мы можем узнать к какой классификации принадлежит текущая запись. Вы, наверное, заметили, что при отображении пользовательской классификации, термины выводятся в виде ссылки, которая должна вести на страницу с записями, принадлежащими к этой классификации. К примеру, кликнув по ссылке “Mac OS”, мы по идее, должны увидеть страницу со списком записей, с классификацией “Mac OS”.

Однако, ничего такого не происходит. Для того, чтобы у нас выводилась такая страница, нам нужно создать специальный шаблонный файл, с именем taxonomy.php. WordPress пытается грузить этот шаблон (если он существует) каждый раз, при просмотре записей, группированных пользовательской таксономией.

<strong>Шаг 1</strong>

Откройте файл category.php, скопируйте его контент, и вставьте в новый файл, сохранив его под именем “taxonomy.php”.

<strong>Шаг 2 Получение информации о текущей классификации</strong>

В файле taxonomy.php, нам необходимо получить информацию о текущей, просматриваемой таксономии. Скорее всего, нам понадобится название и описание (если есть) для выбранной классификации.

Сразу после строки &lt;?php get_header(); ?&gt; следующую строку:

[php]
$term = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) ); 
[/php]

Эта строка получает всю информацию о таксономии и возвращает ее в виде объекта, записанного в переменную $term. Например, классификация “Mac OS” возвращает следующий объект:

[php]
stdClass Object  
(  
    [term_id] =&gt; 13  
    [name] =&gt; Mac OS  
    [slug] =&gt; mac-os  
    [term_group] =&gt; 0  
    [term_taxonomy_id] =&gt; 22  
    [taxonomy] =&gt; operating_system  
    [description] =&gt;  
    [parent] =&gt; 0  
    [count] =&gt; 2  
)  
[/php]

<strong>Шаг 3 Вывод Названия классификации и ее описание</strong>

Нам нужно изменить название страницы, чтобы пользователи видели, какая классификация отображена на странице. Поскольку мы скопировали содержимое шаблона category.php, мы можем взять строку кода, использующуюся для вывода названия рубрики, и немного ее изменить, с тем, чтобы она отображала текущее название классификации, и (если доступно) ее описание.

Измените следующую строку, взятую из шаблона category.php

[php]
printf( __( 'Category Archives: %s', 'twentyten' ), '&lt;span&gt;' . single_cat_title( '', false ) . '&lt;/span&gt;' );  
[/php]

следующим образом:

[php]
printf( __( 'Posts classified under: %s', 'twentyten' ), '&lt;span&gt;' . $term-&gt;name . '&lt;/span&gt;' );  
[/php]

Эта строка выведет название текущей классификации. Далее, ниже добавьте следующую строчку:

[php]
if ('' != $term_descr ) {  
echo &quot;&lt;p&gt;$term_descr&lt;/p&gt;\n&quot;;  
}  
[/php]

Здесь, как не трудно догадаться, будет выведено описание классификации, если оно доступно.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/05/final.jpg"><img class="aligncenter size-full wp-image-2021" title="final" src="http://dreamhelg.ru/wp-content/uploads/2010/05/final.jpg" alt="" width="649" height="563" /></a>

Проверить как работает классификационный список записей, очень просто. Откройте любую, отдельную запись, и кликните на ссылку-название классификации.

Перевод статьи “<a href="http://net.tutsplus.com/tutorials/wordpress/introducing-wordpress-3-custom-taxonomies/">Introducing WordPress 3 Custom Taxonomies</a>”, автор <strong>Paul Kaiser</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/05/intorducing-into-custom-taxonomy-wordpress-3-0/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>8 полезных кодовых сниппетов для WordPress 3.0</title>
		<link>http://dreamhelg.ru/2010/04/8-useful-code-snippets-for-wordpress/</link>
		<comments>http://dreamhelg.ru/2010/04/8-useful-code-snippets-for-wordpress/#comments</comments>
		<pubDate>Tue, 13 Apr 2010 07:00:28 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[блог]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1985</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/04/home.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>WordPress 3.0, запуск которого назначен на первое мая 2010 года, произведет настоящую революцию среди блоговых систем. С таким нововведением, как пользовательские типы записей, разработчики получат возможность создавать гораздо более комплексные и мощные сайты на основе WordPress. В сегодняшней статье собраны наиболее полезные фрагменты кода, которые пригодятся вам при работе с WordPress 3.0.<span id="more-1985"></span>

<h3>Как создать пользовательский тип записи</h3>
Пользовательский тип записи – это очень серьезный шаг вперед для WordPress, поскольку, благодаря этой функциональности, разработчики смогут  создавать любые типы записей, в соответствии со своими потребностями.

Сейчас, в нашем распоряжении есть только записи и страницы. С WordPress 3.0, появится возможность создать новый тип записи, например “товары”, в котором клиент сможет продавать только свои товары, в виде обычной публикации записей в блог.

Создать пользовательский тип записи очень просто: все, что вам нужно сделать – открыть файл functions.php и вставить следующий код:

[php]
$args = array(
        'label' =&gt; __('Products'),
        'singular_label' =&gt; __('Product'),
        'public' =&gt; true,
        'show_ui' =&gt; true,
        'capability_type' =&gt; 'page',
        'hierarchical' =&gt; false,
        'rewrite' =&gt; true,
        'query_var' =&gt; 'products',
        'supports' =&gt; array('title', 'thumbnail')
);
register_post_type( 'product' , $args );
[/php]

После сохранения файла, зайдите в панель управления WordPress и обратите внимание на то, как изменилась навигация слева: добавлен новый тип записи под названием “Товары”.

Источник: <a href="http://codex.wordpress.org/Function_Reference/register_post_type">Кодекс</a>

<h3>Пользовательский тип записи с пользовательской таксономией</h3>
В предыдущем примере, вы узнали как создается пользовательский тип записи, что весьма пригодится, при использовании WordPress в качестве CMS.

Теперь, давайте рассмотрим более комплексное, но очень интересное решение – создадим пользовательский тип записи вместе с соответствующей пользовательской таксономией. Для тех кто не в курсе, таксономия – это термин (такой как рубрика, тэг и т.д.) связанный с записями. Более подробную информацию о таксономии можно узнать из <a href="http://codex.wordpress.org/WordPress_Taxonomy">Кодекса WordPress</a>.

В этом примере, мы создадим пользовательский тип записи под названием “Альбомы”, который будет принадлежать  пользовательской рубрике “Жанр”, и будет иметь тэг “Исполнитель”. Этот фрагмент необходимо вставить в файл functions.php. Всего лишь 27 строк кода, и вы можете создать полноценный архив музыкальных альбомов.

[php]
function post_type_albums() {
	register_post_type(
                     'albums',
                     array('label' =&gt; __('Albums'),
                             'public' =&gt; true,
                             'show_ui' =&gt; true,
                             'supports' =&gt; array(
                                        'post-thumbnails',
                                        'excerpts',
                                        'trackbacks',
                                        'comments')
                                )
                      );
// Добавляем таксономию для Жанров. Теперь мы можем создавать рубрики, относящиеся к этому типу записи. 

	register_taxonomy( 'genres', 'albums', array( 'hierarchical' =&gt; true, 'label' =&gt; __('Genres') ) );

// Добавляем таксономию для Исполнителей. Теперь мы можем создавать тэги, относящиеся к этому типу записи.

        register_taxonomy( 'performer', 'albums',
		array(
                                   'hierarchical' =&gt; false,
			 'label' =&gt; __('Performer'),
			 'query_var' =&gt; 'performer',
			 'rewrite' =&gt; array('slug' =&gt; 'performer' )
		)
	);
}
add_action('init', 'post_type_albums');
[/php]

Источник: <a title="http://wpspecial.net/2010/03/how-to-add-custom-post-types-in-wordpress/" href="http://wpspecial.net/2010/03/how-to-add-custom-post-types-in-wordpress/">wpspecial.net</a>
<h3>Получение пользовательского типа записей</h3>
Теперь, когда вы знаете как создавать пользовательские типы записей, следующий шаг – узнать как получить их из базы данных WordPress, и вывести в блоге.

Хорошая новость для разработчиков – в этом процессе нет ничего сложного или нового. Получить пользовательские типы записей очень просто, с помощью объекта WP_Query.

Следующий пример создает произвольный цикл, получающий записи только с пользовательским типом “albums”.

[php]
&lt;ul&gt;

&lt;?php global $wp_query;
$wp_query = new WP_Query(&quot;post_type=albums&amp;post_status=publish&quot;);

while ($wp_query-&gt;have_posts()) : $wp_query-&gt;the_post(); ?&gt;
    &lt;li&gt;&lt;a href=&quot;&lt;?php the_permalink() ?&gt;&quot; rel=&quot;bookmark&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/li&gt;
&lt;?php endwhile; ?&gt;
&lt;/ul&gt;
[/php]

<h3>Активируем функцию мультисайта</h3>
Одним из самых ярких нововведений в WordPress 3.0 несомненно является мультисайтовое управление. Вкратце, всего лишь с одной установкой WordPress, вы получите возможность запустить сеть WordPress-блогов.

Для того чтобы воспользоваться этой функцией, просто вставьте следующую строку кода в файл wp-config.php. Этот файл расположен в корневой директории вашей WordPress-установки.

[php]
define('WP_ALLOW_MULTISITE', true);
[/php]

После добавления вышеуказанной строки, вам понадобится зайти на страницу “Инструменты – Сеть” и настроить сеть.

Источник: <a title="http://wptheming.com/2010/03/wordpress-3-0-enable-network/" href="http://wptheming.com/2010/03/wordpress-3-0-enable-network/">wptheming.com</a>

<h3>Персональные профили авторов</h3>
Большинство популярных блогов содержит в штате целую команду различных авторов. WordPress позволяет создавать страницы автора, однако WordPress 3.0 появилась возможность использовать определенные шаблоны для разных авторов, так же, как это реализовано с разными рубриками.

Все, что вам понадобится сделать – создать страницу автора с именем author-XX.php, где XX – это ID автора или ник. Например, если ник пользователя “john”, вам нужно создать файл с именем author-john.php.

Источник: <a title="http://codex.wordpress.org/Function_Reference/get_author_template" href="http://codex.wordpress.org/Function_Reference/get_author_template">Кодекс</a>

<h3>Добавление пользовательского фона</h3>
WordPress 3.0 появится новая возможность, которая особенно придется по душе нетехническим пользователям – пользовательский фон. Эта функция позволяет пользователям загрузить фоновую картинку в панели управления, указать ее позиционирование и автоматически применить к своему блогу.

Конечно же тема, которую использует блоггер, должна поддерживать данную функциональность, иначе загруженный фон просто не будет отображаться. Для того, чтобы включить эту функцию, откройте файл functions.php и вставьте следующую строку:

[php]
add_custom_background();
[/php]

<h3>Стилизация редактора WordPress с помощью CSS</h3>
WordPress использует всем известный WYSIWYG-редактор, позволяющий видеть текст в полужирном начертании, курсив и т.д. Однако, некоторые люди хотят большего, например получить возможность отображать текст в редакторе, используя цвета и шрифты темы блога.

Эта функция добавлена в WordPress 3.0. С ее помощью, вы можете создать css-файл (в примере, файл с именем editor-style.css) и подключить его к редактору WYSIWYG, для более удачного отображения. Просто вставьте этот фрагмент кода в файл functions.php.

[php]
add_filter('mce_css', 'my_editor_style');
function my_editor_style($url) {
  if ( !empty($url) )
    $url .= ',';
  // Измените пусть к файлу, если используете вложенные папки 
  $url .= trailingslashit( get_stylesheet_directory_uri() ) . 'editor-style.css';

  return $url;
}
[/php]

Источник: <a title="http://azaozz.wordpress.com/2010/01/02/can-themes-style-the-visual-editor/" href="http://azaozz.wordpress.com/2010/01/02/can-themes-style-the-visual-editor/">azaozz.wordpress.com</a>

<h3>Делаем свою тему совместимой с системой меню WordPress 3.0</h3>
В WordPress 3.0 планируется внедрить абсолютно новую систему меню, которая позволит пользователям добавлять только определенные страницы, добавлять рубрики и многое другое. Хорошие новости для разработчиков шаблонов – добавить поддержку меню WP 3.0 очень просто.

Для этого, откройте файл functions.php и добавьте следующую строку:

[php]
add_theme_support( 'nav-menus' );
[/php]

После этого, вы сможете использовать новую функцию wp_nav_menu() в своих шаблонных файлах:

[php]
wp_nav_menu('sort_column=menu_order&amp;container_class=navigation'
[/php]

Как видите, она принимает те же самые параметры, что и старая функция wp_list_categories().

Источник: <a title="http://wpspecial.net/2010/04/menu-support-for-wordpress-3-0-themes/" href="http://wpspecial.net/2010/04/menu-support-for-wordpress-3-0-themes/">wpspecial.net</a>

Перевод статьи “<a href="http://www.catswhocode.com/blog/8-useful-code-snippets-to-get-started-with-wordpress-3-0">8 useful code snippets to get started with WordPress 3.0</a>”, автор <strong>Jean-Baptiste Jung</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/04/8-useful-code-snippets-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>WordPress. Создаем удобную панель настроек</title>
		<link>http://dreamhelg.ru/2010/04/wordpress-create-better-options-panel/</link>
		<comments>http://dreamhelg.ru/2010/04/wordpress-create-better-options-panel/#comments</comments>
		<pubDate>Fri, 09 Apr 2010 05:00:52 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1942</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/03/200x200.jpg" class="attachment-200x200 wp-post-image" alt="200x200" title="200x200" /></p>Сегодня, мы подробно рассмотрим процесс создания страницы настроек для темы WordPress, на примере замечательного фреймворка <a href="http://www.woothemes.com/">WooFramework</a>.

Затем, мы немного усложним задачу, используя возможности jQuery, немного улучшим  функциональность страницы.<span id="more-1942"></span>
<br/>
<br/>
WordPress – на сегодняшний день является наиболее популярной системой управления контентом (CMS). Многие разработчики выбирают WordPress в качестве CMS, независимо от типа проекта.

Этой системой очень просто пользоваться, но вы можете сделать ее еще проще, включив дополнительные панели управления для пользователей. Вместо того, чтобы открывать файлы PHP-шаблонов и манипулировать с кодом, пользователи могут использовать обычную страницу настроек в панели управления, и с ее помощью управлять вашей WordPress-темой.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/03/theme.jpg"><img class="aligncenter size-full wp-image-1963" title="theme" src="http://dreamhelg.ru/wp-content/uploads/2010/03/theme.jpg" alt="" width="597" height="518" /></a>

Например, если ваша тема имеет красную, синюю и зеленую цветовые схемы, каждой из которых соответствует определенный CSS-файл, было бы гораздо проще, если бы пользователь мог выбирать нужный цвет из выпадающего списка. Поэтому сегодня, вы познакомитесь с процессом создания и совершенствования дополнительной страницы настроек для панели администрирования WordPress.

<h3>Шаг 1</h3>
Прежде чем мы приступим к созданию панели управления, нам понадобится тема. Поэтому загрузите <a href="http://nettuts.s3.amazonaws.com/575_wp/source.zip">архив</a>, с исходными файлами. Вы увидите слегка измененную классическую тему WordPress. Скопируйте папку “nettuts” (так будет называться наша тема) в папку wp-content/themes. Внутри папки должны быть следующие файлы:
<ul>
	<li>functions.php (пустой)</li>
	<li>index.php</li>
	<li>comments.php</li>
	<li>footer.php</li>
	<li>header.php</li>
	<li>rtl.php</li>
	<li>sidebar.php</li>
	<li>style.css</li>
	<li>screenshot.png</li>
	<li>папка с картинками, содержащая два файла</li>
</ul>

Большая часть нашего кода, будет расположена в файле functions.php.
<blockquote>Тема опционально может использовать функциональный файл, расположенный внутри папки с темой, с именем functions.php. Этот файл действует так же как плагин, и если он входит в состав вашей темы, то он автоматически загружается во время инициализации WordPress (как внешних страниц так и панели администрирования).</blockquote>
Этот файл предполагается использовать для:
<ul>
	<li>описания функций, используемых в различных шаблонных файлах вашей темы</li>
	<li>установки дополнительных панелей управления, позволяющих пользователям настраивать цвета, стили и другие аспекты вашей темы.</li>
</ul>
(<a href="http://codex.wordpress.org/Theme_Development#Theme_Functions_File">Из Кодекса WordPress</a>)
<h3>Шаг 2</h3>
Теперь, после того как вы скачали и установили предложенную тему, зайдите на страницу “Внешний вид” – “Темы”, и активируйте нашу тему nettuts.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/03/theme_active.jpg"><img class="aligncenter size-full wp-image-1964" title="theme_active" src="http://dreamhelg.ru/wp-content/uploads/2010/03/theme_active.jpg" alt="" width="569" height="298" /></a>

Теперь, нам нужно продумать html-разметку для нашей панели управления. Будем использовать вот такую структуру:

[html]
&lt;div class=&quot;wrap rm_wrap&quot;&gt;
	&lt;div class=&quot;rm_opts&quot;&gt;
		&lt;form method=&quot;post&quot;&gt;
			&lt;div class=&quot;rm_section&quot;&gt;
				&lt;div class=&quot;rm_title&gt;
					&lt;h3&gt;Title&lt;/h3&gt;
					&lt;submit button&gt;
				&lt;/div&gt;
				&lt;div class=&quot;rm_input rm_&lt;select/textarea/text etc&gt;&quot;&gt;
					&lt;input area&gt;
					&lt;description&gt;
				&lt;/div&gt;
			&lt;/div&gt;

		/*Выводим инпуты нужное количество раз (соответствующее количеству настроек)*/
		/* используем &lt;div class=&quot;rm_section&quot;&gt; для каждой секции настроек */
		&lt;/form&gt;
	&lt;/div&gt;
&lt;/div&gt;

[/html]

Позвольте мне все вам все здесь объяснить. Группы настроек будут заключены в блок с классом “rm_wrap”, а затем в блок с классом “rp_opts”. Затем, внутри этих блоков, мы открываем тег form, внутри которой будут размещены все необходимые инпуты. Каждая секция настроек (Основные настройки, Настройки домашней страницы, Настройки блога и т.д.) будет расположена в отдельном блоке с именем класса “rm_section”. В этом блоке будет расположено название (для секции настроек) и несколько блоков с инпутами. Используя специальные классы для блоков, типа &lt;div class=”rm_input rm_select”&gt;, мы можем назначить стили выпадающим спискам, текстовым а также многострочным полям.

Наиболее важной частью всего этого является то, что нам не придется создавать весь этот код вручную – мы будем использовать возможности PHP, везде где это возможно. Нет смысла составлять код вручную, когда в нашем распоряжении есть циклы.
<h3>Шаг 3</h3>
Откройте файл functions.php своим любимым редактором кода (я использую NotePad++), и вставьте следующий код:

[php]
&lt;?php

	$themename = &quot;NetTuts&quot;;
	$shortname = &quot;nt&quot;;

[/php]

Это две PHP-переменные, содержащие имя вашей темы (в нашем случае это Nettuts), и псевдоним, который вы укажете (в нашем примере это nt). Псевдоним используется в качестве префикса к именам всех настроек темы, и как правило является уникальным для каждой темы.

Далее, мы создадим пару строчек кода, для автоматического генерирования списка wordpress-рубрик, вместо того, чтобы заставлять пользователя вручную указывать их ID. Вставьте следующий код, сразу же после, предыдущего:

[php]
$categories = get_categories('hide_empty=0&amp;order_by=name');
		$wp_cats = array();

    foreach ($categories as $category_list){
        $wp_cats[$category_list -&gt; cat_ID] = $category_list -&gt; cat_name;
    }

array_unshift($wp_cats, &quot;Выберите рубрику&quot;);
[/php]

Этот фрагмент кода использует встроенную wordpress-функцию get_categories, для получения всех рубрик, а затем, с помощью цикла foreach, сохранения их в переменной $wp_cats. Затем к массиву добавляется опция “выберите рубрику”.

<h3>Шаг 4</h3>
Теперь пришло время создать список настроек для нашей темы. Вставьте следующий код в файл functions.php:

[php]
$options = array(

        array( &quot;name&quot; =&gt; &quot;Настройки&quot;,
                &quot;type&quot; =&gt; &quot;title&quot; ),

        array ( &quot;name&quot; =&gt; &quot;Основные настройки&quot;,
                &quot;type&quot; =&gt; &quot;section&quot; ),
        array ( &quot;type&quot; =&gt; &quot;open&quot;),

        array ( &quot;name&quot; =&gt; &quot;Цветовая схема&quot;,
                &quot;desc&quot; =&gt; &quot;Выберите цветовую схему темы&quot;,
                &quot;id&quot; =&gt; $shortname . &quot;_color_scheme&quot;,
                &quot;type&quot; =&gt; &quot;select&quot;,
                &quot;options&quot; =&gt; array (&quot;синяя&quot;, &quot;красная&quot;, &quot;зеленая&quot;),
                &quot;std&quot; =&gt; &quot;blue&quot; ),

        array ( &quot;name&quot; =&gt; &quot;URL Логотипа&quot;,
                &quot;desc&quot; =&gt; &quot;Введите ссылку к картинке логотипа&quot;,
                &quot;id&quot; =&gt; $shortname . &quot;_logo&quot;,
                &quot;type&quot; =&gt; &quot;text&quot;,
                &quot;std&quot; =&gt; &quot;&quot; ),

        array ( &quot;name&quot; =&gt; &quot;Пользовательский CSS&quot;,
                &quot;desc&quot; =&gt; &quot;Хотите использовать свой CSS-код? Вставьте его в это поле&quot;,
                &quot;id&quot; =&gt; $shortname . &quot;_custom_css&quot;,
                &quot;type&quot; =&gt; &quot;textarea&quot;,
                &quot;std&quot; =&gt; &quot;&quot; ),
        
        array ( &quot;type&quot; =&gt; &quot;close&quot;),

        array ( &quot;name&quot; =&gt; &quot;Домашняя страница&quot;,
                &quot;type&quot; =&gt; &quot;section&quot; ),

        array (&quot;type&quot; =&gt; &quot;open&quot;),

        array ( &quot;name&quot; =&gt; &quot;Картинка в шапке, на главной странице&quot;,
                &quot;desc&quot; =&gt; &quot;Введите URL картинки, которая будет использоваться в шапке&quot;,
                &quot;id&quot; =&gt; $shortname .&quot;_header_img&quot;,
                &quot;type&quot; =&gt; &quot;text&quot;,
                &quot;std&quot; =&gt; &quot;&quot;),

         array ( &quot;name&quot; =&gt; &quot;Рубрика домашней страницы&quot;,
                &quot;desc&quot; =&gt; &quot;Выберите рубрику, в которую будут публиковатся записи&quot;,
                &quot;id&quot; =&gt; $shortname .&quot;_feat_cat&quot;,
                &quot;type&quot; =&gt; &quot;select&quot;,
                &quot;options&quot; =&gt; $wp_cats,
                &quot;std&quot; =&gt; &quot;Выберите рубрику&quot;),
        
        array ( &quot;type&quot; =&gt; &quot;close&quot;),

        array ( &quot;name&quot; =&gt; &quot;Подвал&quot;,
                &quot;type&quot; =&gt; &quot;section&quot;),

        array ( &quot;type&quot; =&gt; &quot;open&quot;),

        array(  &quot;name&quot; =&gt; &quot;Текст копирайта&quot;,
                &quot;desc&quot; =&gt; &quot;Введите текст, который будет размещен в правой части подвала. Можно использовать HTML&quot;,
                &quot;id&quot; =&gt; $shortname.&quot;_footer_text&quot;,
                &quot;type&quot; =&gt; &quot;text&quot;,
                &quot;std&quot; =&gt; &quot;&quot;),

        array(  &quot;name&quot; =&gt; &quot;Код Google Analytics&quot;,
                &quot;desc&quot; =&gt; &quot;Здесь вы можете разместить код Google Analytics, или любой другой счетчик&quot;,
                &quot;id&quot; =&gt; $shortname.&quot;_ga_code&quot;,
                &quot;type&quot; =&gt; &quot;textarea&quot;,
                &quot;std&quot; =&gt; &quot;&quot;),

        array( &quot;name&quot; =&gt; &quot;Favicon&quot;,
                &quot;desc&quot; =&gt; &quot;Favicon - это пиксельная иконка, которая представляет ваш сайт. Вставьте URL к картинке с расширением .ico&quot;,
                &quot;id&quot; =&gt; $shortname.&quot;_favicon&quot;,
                &quot;type&quot; =&gt; &quot;text&quot;,
                &quot;std&quot; =&gt; get_bloginfo('url') .&quot;/favicon.ico&quot;),

        array(  &quot;name&quot; =&gt; &quot;Feedburner URL&quot;,
                &quot;desc&quot; =&gt; &quot;Feedburner - это сервис Google, управляющий RSS-потоками. Paste your Feedburner URL here to let readers see it in your website&quot;,
                &quot;id&quot; =&gt; $shortname.&quot;_feedburner&quot;,
                &quot;type&quot; =&gt; &quot;text&quot;,
                &quot;std&quot; =&gt; get_bloginfo('rss2_url')),

        array( &quot;type&quot; =&gt; &quot;close&quot;)

    );
[/php]

Это был довольно большой фрагмент кода, заслуживающий небольшого разъяснения. Итак:
<ul>
	<li>PHP-переменная $options хранит весь список настроек для нашей темы.</li>
	<li>Список настроек состоит из нескольких массивов, каждый из которых содержит ключ “type”, для определения типа настройки и способа ее отображения.</li>
	<li>Наш список настроек начинается с массива “type” =&gt; “title” – который будет использоваться для отображения имени темы и названия в заголовке страницы.</li>
	<li>Каждый раздел (Основные настройки, Домашняя страница, Подвал) имеет отдельный список настроек.</li>
	<li>Мы начинаем новую секцию, закрывая любую из предыдущих секций, и объявления новой секции с помощью массива array(“name” =&gt; “Подвал”, “type” =&gt; “section”).</li>
	<li>Каждая опция может содержать следующие настройки:
<strong>name:</strong> Имя текстового поля.
<strong>desc: </strong>Короткое описание поля, для пользователя.<strong>
id:</strong> id поля, с префиксом из псевдонима. Оно будет использоваться как для записи настройки, так и для доступа к ней.
<strong>type: </strong>тип input - text, select или textarea
<strong>options:</strong> используется для объявления массива настроек для поля выпадающего списка.
<strong>std:</strong> значение поля по умолчанию, используется если никаких других значений не указано.</li>
</ul>

<h3>Шаг 5</h3>
Попробуйте зайти в панель управления Wordpress. Вы нигде не найдете указанных нами настроек, как же нам отобразить их? Добавляем следующий код в файл functions.php:

[php]
function mytheme_add_admin(){
        
        global $themename, $shortname, $options;
		
        if($_GET['page'] == basename(__FILE__) ){
            
            if( 'saved' == $_REQUEST['action']){
                foreach ($options as $value){
                    update_option($value['id'], $_REQUEST[$value['id']]);
                }

                foreach ($options as $value){
                    if( isset ($_REQUEST[$value['id']]) ){
                        update_option($value['id'], $_REQUEST[$value['id']] );
                    }else{
                        delete_option($value['id']);
                    }
                }
                header(&quot;Location: admin.php?page=functions.php&amp;saved=true&quot;);
                die;
            }
        }

        else if('reset' == $_REQUEST['action']){
            foreach($options as $value){
                delete_option($value['id']);
            }

            header(&quot;Location: admin.php&amp;page=functions.php&amp;reset=true&quot;);

            die;
        }

         add_menu_page($themename, $themename, 'administrator', basename(__FILE__), 'mytheme_admin');
    }

    function mytheme_add_init() {
 
}
[/php]

Эта функция используется как для обновления самих настроек, так и для добавления страницы в панели управления. Если настройки были сохранены (определяется с помощью скрытой переменной save), то все настройки обновляются указанными значениями. Если же, настройки были сброшены (определяется с помощью другой скрытой переменной reset), то все настройки удаляются.

Последняя строка функции, добавляет страницу меню – параметры по порядку: имя и название, уровень пользовательских прав для просмотра страницы, страница сохранения и функция, использующаяся для отображения/сохранения настроек (в нашем примере называется mytheme_admin).

Заметили, что функция mytheme_add_init пустая? Пусть пока останется такой как есть, мы вернемся к ней позже.

<h3>Шаг 6</h3>
Страница настроек в панели управления так и не появилась? Но, мы еще не дописали функцию mytheme_admim, о которой говорилось выше. Для создания этой функции нам понадобится код из шагов 6,7 и 8. Давайте начнем.

[php]
function mytheme_admin(){
        global $themename, $shortname, $options;
        $i = 0;

         if($_REQUEST['action'] == 'save')
	echo '&lt;div id=&quot;message&quot; class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;strong&gt; настройки темы '. $themename .' были сохранены&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;';  

        if($_REQUEST['reset'])
            echo '&lt;div id=&quot;message&quot; class=&quot;updated fade&quot;&gt;&lt;p&gt;&lt;strong&gt; настройки темы '. $themename .' были сброшены&lt;/strong&gt;&lt;/p&gt;&lt;/div&gt;';
    ?&gt;

&lt;div class=&quot;wrap rm_wrap&quot;&gt;
    &lt;h2&gt;Настройки &lt;?php echo $themename ?&gt;&lt;/h2&gt;

    &lt;div class=&quot;rm_opts&quot;&gt;
        &lt;form method=&quot;post&quot;&gt;
[/php]

Очень просто, не правда ли? Если настройка была сохранена, выводим подтверждающее сообщение. То же самое для сброса. Обратите внимание на класс “update fade” – WordPress автоматически выведет это сообщение в самом верху окна. Удобно, не правда ли? Идем дальше, начиная с блока “rm_wrap”

<h3>Шаг 7</h3>
Вставляем следующий код, ниже:

[php]
&lt;?php foreach($options as $value) {
                    switch ($value['type']){
                    case &quot;open&quot; :
             ?&gt;

            &lt;?php
                    break;
                    case &quot;close&quot; :
            ?&gt;

            &lt;/div&gt;
            &lt;/div&gt;
            &lt;br /&gt;

            &lt;?php
                    break;
                    case &quot;title&quot; :
            ?&gt;

            &lt;p&gt;Для более удобного управления темой &lt;?php echo $themename;?&gt;, вы можете использовать меню, расположенное ниже&lt;/p&gt;

            &lt;?php
                    break;
                    case &quot;text&quot; :
            ?&gt;

            &lt;div class=&quot;rm_input rm_text&quot;&gt;
                &lt;label for=&quot;&lt;?php echo $value['id']?&gt;&quot;&gt;
                    &lt;?php echo $value['name']?&gt;
                &lt;/label&gt;

                &lt;input name=&quot;&lt;?php echo $value['id']?&gt;&quot; id=&quot;&lt;?php echo $value['id']?&gt;&quot; type=&quot;&lt;?php echo $value['type']?&gt;&quot;
                       value=&quot;&lt;?php if (get_settings($value['id']) != &quot;&quot;){ echo stripslashes(get_settings($value['id'])); } else {echo $value[&quot;std&quot;];} ?&gt;&quot; /&gt;

                &lt;small&gt;&lt;?php echo $value['desc']; ?&gt;&lt;/small&gt;
                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;

             &lt;?php
                    break;
                    case &quot;textarea&quot; :
            ?&gt;

            &lt;div class=&quot;rm_input rm_textarea&quot;&gt;
                &lt;label for=&quot;&lt;?php echo $value['id']?&gt;&quot;&gt;
                    &lt;?php echo $value['name']?&gt;
                &lt;/label&gt;

                &lt;textarea name=&quot;&lt;?php echo $value['id']?&gt;&quot; type=&quot;&lt;?php echo $value['type']?&gt;&quot; &gt;
                    &lt;?php if (get_settings($value['id']) != &quot;&quot;){
                                echo stripslashes(get_settings($value['id']));
                          }else {
                                echo $value[&quot;std&quot;];
                          }?&gt;
                &lt;/textarea&gt;

                &lt;small&gt;&lt;?php echo $value['desc']; ?&gt;&lt;/small&gt;
                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;?php
                    break;
[/php]

Здесь используется php-цикл foreach, каждый тип настроек определяется индивидуально для каждого случая. Для этого мы будем использовать оператор switch. Переменная в операторе switch – это текущий тип параметра, case – ожидаемый тип параметра. Вы, наверное, обратили внимание на выражение “break”, после каждого case? Это выражение используется для предотвращения неправильной обработки условия. Когда значение case соответствует переменной, все последующие case также будут выполнены. То есть, если у нас определен case3, то кроме него, также будут выполняться case4, case5 и т.д. Но нам этого не нужно, поэтому мы используем break, для прекращения работы оператора switch.

Если текущее значение параметра “open” – ничего не происходит. Если текущее значение “close”, ставятся два закрывающих блока. Значение параметра “title” используется только один раз – во вступительном тексте перед настройками темы. Для каждого типа “text” (input type=”text”), “select” (выпадающий список) и “textarea” (название говорит само за себя) – отображается соответствующий input. Обратите внимание на блок &lt;div class=”clearfix”&gt; – он используется для чистки флоатов, которые мы будем использовать далее.
<h3>Шаг 8</h3>
Мы приближаемся к концу этой довольно большой функции. Вставьте следующий код:

[php]
case &quot;select&quot; :
            ?&gt;

            &lt;div class=&quot;rm_input rm_select&quot;&gt;
                 &lt;label for=&quot;&lt;?php echo $value['id']?&gt;&quot;&gt;
                    &lt;?php echo $value['name']?&gt;
                &lt;/label&gt;

                &lt;select name=&quot;&lt;?php echo $value['id']; ?&gt;&quot; id=&quot;&lt;?php echo $value['id']; ?&gt;&quot;&gt;
                    &lt;?php foreach ($value['options'] as $option) : ?&gt;
                    &lt;option &lt;?php if(get_settings($value['id']) == $option){ echo &quot;selected=selected&quot;;} ?&gt;&gt;
                        &lt;?php echo $option; ?&gt;
                    &lt;/option&gt;
                    &lt;?php endforeach; ?&gt;
                &lt;/select&gt;

                 &lt;small&gt;&lt;?php echo $value['desc']; ?&gt;&lt;/small&gt;
                 &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;

             &lt;?php
                    break;
                    case &quot;checkbox&quot; :
            ?&gt;

            &lt;div class=&quot;rm_input rm_checkbox&quot;&gt;
                &lt;label for=&quot;&lt;?php echo $value['id']?&gt;&quot;&gt;
                    &lt;?php echo $value['name']?&gt;
                &lt;/label&gt;

                &lt;?php if(get_options($value['id'])){
                        $checked = &quot;checked=\&quot;checked\&quot;&quot;;
                    }else{
                        $checked = &quot;&quot;;
                    }
                ?&gt;

                &lt;input type=&quot;checkbox&quot; name=&quot;&lt;?php echo $value['id']?&gt;&quot; id=&quot;&lt;?php echo $value['id']?&gt;&quot; value=&quot;true&quot; &lt;?php echo $checked; ?&gt; /&gt;

                &lt;small&gt;&lt;?php echo $value['desc']; ?&gt;&lt;/small&gt;
                &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;?php
                    break;
                    case &quot;section&quot; :
                    $i++;
            ?&gt;

            &lt;div class=&quot;rm_section&quot;&gt;
                &lt;div class=&quot;rm_title&quot;&gt;
                    &lt;h3&gt;
                        &lt;img src=&quot;&lt;?php bloginfo('template_directory')?&gt;/functions/images/trans.gif&quot; class=&quot;inactive&quot; alt=&quot;&quot;/&gt;
                        &lt;?php echo $value['name']; ?&gt;
                    &lt;/h3&gt;
					
					 &lt;span class=&quot;submit&quot;&gt;
                            &lt;input name=&quot;save&lt;?php echo $i; ?&gt;&quot; type=&quot;submit&quot; value=&quot;Сохранить&quot; /&gt;
                  	 &lt;/span&gt;
                    &lt;div class=&quot;clearfix&quot;&gt;&lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;rm_options&quot;&gt;
            &lt;?php
                    break;
                    }
                }
            ?&gt;
            &lt;input type=&quot;hidden&quot; name=&quot;action&quot; value=&quot;save&quot; /&gt;
        &lt;/form&gt;

        &lt;form method=&quot;post&quot;&gt;
            &lt;p class=&quot;submit&quot;&gt;
                &lt;input name=&quot;reset&quot; type=&quot;submit&quot; value=&quot;Сброс&quot; /&gt;
                &lt;input name=&quot;action&quot; type=&quot;hidden&quot; value=&quot;reset&quot; /&gt;
            &lt;/p&gt;
        &lt;/form&gt;

        &lt;div style=&quot;font-size:9px; margin-bottom:10px;&quot;&gt;
            Иконки: &lt;a href=&quot;http://www.woothemes.com/2009/09/woofunction/&quot;&gt;WooFunction&lt;/a&gt;
        &lt;/div&gt;
&lt;/div&gt;

  &lt;?php  }
[/php]

Для типа настройки “section”, мы используем переменную-счетчик $i. Это позволяет отслеживать номер секций и соединять его с именем кнопки отправки данных, получая таким образом уникальное имя для каждой кнопки. Кроме того, в конец секции добавляется форма, для сброса всех настроек. Картинка будет использована для дальнейшей jQuery-фикации. Это последний фрагмент кода, который приведет наши функции в действие:

[php]

add_action('admin_init', 'mytheme_add_init');
add_action('admin_menu', 'mytheme_add_admin');
 
[/php]

Этот код добавляет дополнительную страницу в панели управления WordPress.

<h3>Шаг 9</h3>
<a href="http://dreamhelg.ru/wp-content/uploads/2010/03/theme_no_style.jpg"><img class="aligncenter size-full wp-image-1965" title="theme_no_style" src="http://dreamhelg.ru/wp-content/uploads/2010/03/theme_no_style.jpg" alt="" width="626" height="338" /></a>

Отлично, теперь у нас есть собственная страница управления, с отдельным пунктом меню. Однако, зайдя на эту страничку, мы видим, что не все так хорошо как нам бы хотелось. Но не беда, у нас есть отличный помощник – CSS! Создаем новую папку “functions”, внутри папки nettuts. Внутри этой папки, создаем новый файл – functions.css, и вставляем в него следующий код:

[css]
.rm_wrap{
	width:740px;
}
.rm_section{
	border:1px solid #ddd;
	border-bottom:0;
	background:#f9f9f9;
}
.rm_opts label{
	font-size:12px;
	font-weight:700;
	width:200px;
	display:block;
	float:left;
}
.rm_input {
	padding:30px 10px;
	border-bottom:1px solid #ddd;
	border-top:1px solid #fff;
}
.rm_opts small{
	display:block;
	float:right;
	width:200px;
	color:#999;
}
.rm_opts input[type=&quot;text&quot;], .rm_opts select{
	width:280px;
	font-size:12px;
	padding:4px;
	color:#333;
	line-height:1em;
	background:#f3f3f3;
}
.rm_input input:focus, .rm_input textarea:focus{
		background:#fff;
}
.rm_input textarea{
	width:280px;
	height:175px;
	font-size:12px;
	padding:4px;
	color:#333;
	line-height:1.5em;
	background:#f3f3f3;
}
.rm_title h3 {
	cursor:pointer;
	font-size:1em;
	text-transform: uppercase;
	margin:0;
	font-weight:bold;
	color:#232323;
	float:left;
	width:80%;
	padding:14px 4px;
}
.rm_title{
	cursor:pointer;
	border-bottom:1px solid #ddd;
	background:#eee;
	padding:0;
}
.rm_title h3 img.inactive{
	margin:-8px 10px 0 2px;
	width:32px;
	height:32px;
	background:url('images/pointer.png') no-repeat 0 0;
	float:left;
	-moz-border-radius:6px;
	border:1px solid #ccc;
}
.rm_title h3 img.active{
	margin:-8px 10px 0 2px;
	width:32px;
	height:32px;
	background:url('images/pointer.png') no-repeat  0 -32px;
	float:left;
	-moz-border-radius:6px;
	-webkit-border-radius:6px;
	border:1px solid #ccc;
}
.rm_title h3:hover img{
	border:1px solid #999;
}
.rm_title span.submit{
	display:block;
	float:right;
	margin:0;
	padding:0;
	width:15%;
	padding:14px 0;
}
.clearfix{
	clear:both;
}
.rm_table th, .rm_table td{
	border:1px solid #bbb;
	padding:10px;
	text-align:center;
}
.rm_table th, .rm_table td.feature{
	border-color:#888;
	}

[/css]

Думаю, этот код не требует каких-либо разъяснений, все предельно просто и понятно. Вы, конечно, можете изменять его по своему вкусу.

<h3>Шаг 10</h3>
Теперь, когда у нас есть готовый CSS-файл, как же подключить его к странице, если у нас нет прямого доступа к разделу документа &lt;head&gt;? Помните, мы создали пустую функцию mytheme_add_init()? Вон она-то как раз нам и поможет. Измените ее следующим образом:

[php]
function mytheme_add_init() {
       $file_dir = get_bloginfo('template_directory');
       wp_enqueue_style(&quot;functions&quot;, $file_dir.&quot;/functions/style.css&quot;, false, &quot;1.0&quot;, &quot;all&quot;);
}
[/php]

Этот код подключит файл functions.css в раздел документа &lt;head&gt;. Расположение файла определяется папкой с шаблоном.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/03/theme_no_script.jpg"><img class="aligncenter size-full wp-image-1966" title="theme_no_script" src="http://dreamhelg.ru/wp-content/uploads/2010/03/theme_no_script.jpg" alt="" width="599" height="566" /></a>

<h3>Шаг 11</h3>
Взгляните на нашу страницу. Она выглядит вполне хорошо, осталось лишь добавить функциональность иконкам плюса, в заголовках секции. Для этого будем использовать jQuery. Создайте новый файл rm_script.js внутри папки nettuts/functions/folder. Вставьте следующий код:

[javascript]
jQuery(document).ready(function(){
		jQuery('.rm_options').slideUp();

		jQuery('.rm_section h3').click(function(){
			if(jQuery(this).parent().next('.rm_options').css('display')==='none')
				{	jQuery(this).removeClass('inactive').addClass('active').children('img').removeClass('inactive').addClass('active');

				}
			else
				{	jQuery(this).removeClass('active').addClass('inactive').children('img').removeClass('active').addClass('inactive');
				}

			jQuery(this).parent().next('.rm_options').slideToggle('slow');
		});
});
[/javascript]

Что же делает этот код? После того как DOM загружен, все блоки с классом “rm_options” сворачиваются. Затем, при клике на иконке плюса, удаляется класс “inactive”, и добавляется класс “active”, который заменяет иконку на знак минус. При повторном нажатии этой иконки, происходит обратный процесс. Для сворачивания/разворачивания блоков используется довольно простая функция jQuery slideToggle. Чтобы подключить этот скрипт к странице, мы будем использовать уже знакомую нам функцию mytheme_add_init(), измените ее следующим образом:

[php]
function mytheme_add_init() {
       $file_dir = get_bloginfo('template_directory');
       wp_enqueue_style(&quot;functions&quot;, $file_dir.&quot;/functions/style.css&quot;, false, &quot;1.0&quot;, &quot;all&quot;);
       wp_enqueue_script(&quot;rm_script&quot;, $file_dir.&quot;/functions/script.js&quot;, false, &quot;1.0&quot;);  
}
[/php]

После этого, скрипт должен работать. Проверьте, как это выглядит на странице:

<a href="http://dreamhelg.ru/wp-content/uploads/2010/03/theme_final.jpg"><img class="aligncenter size-full wp-image-1967" title="theme_final" src="http://dreamhelg.ru/wp-content/uploads/2010/03/theme_final.jpg" alt="" width="613" height="399" /></a>
<h3>Шаг 12</h3>
Теперь, после того как наша страница настроек полностью готова, осталось немного рассказать об использовании самих настроек. Код, позволяющий использовать параметры, выглядит следующим образом:

[php]
$var = get_option('nt_colur_scheme');
[/php]

С его помощью, мы сможем реализовать смену цветовой схемы сайта. Это довольно просто:

[php]
/* Изменяем CSS-файл, в зависимости от выбранного цвета */
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot;  href=&quot;&lt;?php bloginfo('template_directory'); ?&gt;/&lt;?php echo get_option('nt_color_scheme'); ?&gt;.css&quot; /&gt; 

/*Выводим текст в подвале, можно использовать HTML-тэги */
&lt;p&gt;&lt;?php echo stripslashes(get_option('bl_footer_text')); ?&gt;&lt;/p&gt;
[/php]

Область применения ограничивается только вашим воображением.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/03/nettuts.zip">Скачать архив с приведенным примером.</a>

Перевод статьи “<a href="http://net.tutsplus.com/tutorials/wordpress/how-to-create-a-better-wordpress-options-panel/">How to Create a Better WordPress Options Panel</a>”, автор <strong>Rohan Mehta</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/04/wordpress-create-better-options-panel/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>WordPress. Как разделить контент на две колонки</title>
		<link>http://dreamhelg.ru/2010/02/wordpress-split-content-into-two-columns/</link>
		<comments>http://dreamhelg.ru/2010/02/wordpress-split-content-into-two-columns/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 13:41:06 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[блог]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1869</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/02/246-wp-split-content.png" class="attachment-200x200 wp-post-image" alt="246-wp-split-content" title="246-wp-split-content" /></p>WordPress замечательная CMS, однако для реализации некоторых функций в вашей теме, иногда требуется нестандартное мышление. <span id="more-1869"></span>Обычно текст записи или страницы, выводится в шаблоне, с помощью одиночного вызова соответствующей функции:

<code>the_content(args);</code>

Но, что если вам нужно разделить контент на несколько блоков? Это может потребоваться, для многоколоночной темы, или, имеющей несколько разделов на одной странице. В wordpress есть функция <code>get_the_content()</code>, для получения контента в виде PHP-переменной, но как же определить где именно располагаются разделы?

Существуют различные решения, но все они сводятся к следующему:
<ol>
	<li>Разбивание контента HTML-тэгами, такими например, как заголовок h2. К сожалению, этот метод предполагает наличие минимальных знаний HTML у автора, к тому же он не очень гибкий – вам нельзя будет использовать два заголовка в одной колонке.</li>
	<li>Использование шорткода WordPress. Это более удобный способ, но все же, он накладывает определенные обязательства на редактора статьи - запоминать и правильно использовать необходимый код.</li>
</ol>

WordPress-тэг <code>&lt;!—more—&gt;</code>, может предложить гораздо лучшее решение. Обычно, он используется для разбиения длинной статьи на две части, однако не все темы используют эту возможность, к тому же, по умолчанию, он работает только для записей (не для страниц). Использование тега <code>&lt;—more—&gt;</code>, имеет ряд преимуществ:

<ul>
	<li>кнопку “more”, которая доступна как в HTML, так и в визуальном редакторе.</li>
	<li>разделы можно располагать в любом месте текста.</li>
	<li>принцип действия очень простой, процесс разделения контента понятен даже не опытным пользователям.</li>
</ul>

<a href="http://dreamhelg.ru/wp-content/uploads/2010/02/246-wp-split-content-screen.png"><img class="aligncenter size-full wp-image-1874" title="246-wp-split-content-screen" src="http://dreamhelg.ru/wp-content/uploads/2010/02/246-wp-split-content-screen.png" alt="" width="465" height="309" /></a>

Для того, чтобы использовать тег <code>more</code>, для разделения статьи, вам понадобится файл <strong>functions.php</strong>, расположенный в вашей теме. Просто откройте его, и вставьте следующий код.

[php]
// разбиваем контент тегом more и возвращаем в виде массива
function split_content() {

	global $more;
	$more = true;
	$content = preg_split('/&lt;span id=&quot;more-\d+&quot;&gt;&lt;\/span&gt;/i', get_the_content('more'));
	for($c = 0, $csize = count($content); $c &lt; $csize; $c++) {
		$content[$c] = apply_filters('the_content', $content[$c]);
	}
	return $content;

}
[/php]

Теперь, вам нужно найти файлы темы, содержащие вызов функции <code>the_content()</code>, расположенный внутри цикла. Как правило, это файлы <strong>single.php</strong> и <strong>page.php</strong>, которые используются для отображения одиночной записи и страницы. Однако, кроме этих файлов, <code>the_content()</code> также используется в файлах <strong>index.php</strong>, <strong>archive.php</strong> и <strong>search.php</strong>, для вывода списка записей, поэтому будьте осторжны, с внесением изменений в шаблон.

После того, как найдете нужный код, закомментируйте строку вызова функции <code>the_content()</code>, и вызовите функцию <code>split_content()</code>.  Она вернет контент в виде массива,  где каждый элемент представляет собой одиночный блок контента, разделенный тегом <code>&lt;--more--&gt;</code>, <code>$content[0]</code>, <code>$content[1]</code>, <code>$content[2]</code> ... и так далее. После этого, расположить блоки внутри нужной HTML-разметки не составит труда.

[php]
&lt; ?php
// обычный вывод контента
// the_content('&lt;p&gt;Read the rest of this page »&lt;/p&gt;');

// разбиение контента в массив
$content = split_content();

// вывод первой секции контента в отдельной колонке
echo '&lt;div id=&quot;column1&quot;&gt;', $content[0], '&lt;/div&gt;';

// вывод оставшейся части контента в другой колонке
echo '&lt;div id=&quot;column2&quot;&gt;', implode(array_shift($content)), '&lt;/div&gt;';
?&gt;
[/php]

Надеюсь, этот код будет вам полезен.

Перевод статьи "<a href="http://www.sitepoint.com/blogs/2010/02/04/split-wordpress-content-into-multiple-sections/">How to Split WordPress Content Into Two or More Columns</a>", автор <strong>Craig Buckler</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/02/wordpress-split-content-into-two-columns/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WordPress. Фильтруем HTML в записях и комментариях</title>
		<link>http://dreamhelg.ru/2010/01/wordpress-adding-and-filtering-raw-html-in-post-and-comments/</link>
		<comments>http://dreamhelg.ru/2010/01/wordpress-adding-and-filtering-raw-html-in-post-and-comments/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 08:03:44 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[comments]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[html]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1806</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/01/home.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Я давно уже наблюдаю мучения читателей, которые пытаются оставить примеры html-разметки в комментариях. К сожалению, в прошлом году, долго не находилось времени, для решения этой проблемы.
Но сегодня, с радостью хочу объявить о том, что проблема наконец-то решена – теперь вы можете использовать любую html-разметку в комментариях, предварительно заключив ее в теги &lt;code&gt;, а если вам интересно как это реализовано, то читайте далее.<span id="more-1806"></span>

<h3>Описание проблемы</h3>
HTML – это структурированный язык разметки, в котором текст заключается внутри тегов с угловыми скобками. Эти тэги сообщает браузеру, каким образом необходимо структурировать/отобразить информацию, содержащуюся между ними. Одни из самых распространенных тегов – это открывающий и закрывающий тег параграфа (<code>&lt;p&gt;</code>, <code>&lt;/p&gt;</code>); они сообщают браузеру, что текст, который находится внутри, является параграфом, в общей структуре документа.

<em><strong>Но что если, вы захотите показать читателям пример html-разметки?</strong></em>

Вы не сможете вывести тэги на экран, просто напечатав их, поскольку браузер решит, что это html-код и не отобразит их. Поэтому, для того чтобы вывести html-код, мы должны использовать специальные угловые скобки. Для вывода таких скобок используется их символьный объект –  специальный код, который выведет нужный символ. Этот код может быть как в форме имени, так и в форме числа, можно использовать то, что больше нравится. Например, прямые кавычки “ можно вывести двумя способами – используя объект-имя <code>&amp;quot;</code> или объект-число <code>&amp;#34;</code>.

Левую угловую скобку можно вывести с помощью <code>&amp;lt;</code> или <code>&amp;#60;</code>. В нашем примере, для вывода угловых скобок, мы будем использовать символьные объекты <code>&amp;lt;</code> и <code>&amp;gt;.</code>

<h3>Добавляем HTML-код в текст записи WordPress</h3>
Теперь, после того как мы разобрались, как отобразить HTML-код на экране, давайте разберемся как нам это использовать в записях WordPress. На первый взгляд все очень просто – нужно всего лишь заменить левые и правые угловые скобки в их символьные эквиваленты. Это хорошо пока у вас одна-две строчки кода, но что делать, если их значительно больше? Существуют различные плагины для решения этой проблемы, но большинство их них требуют дополнительной разметки в статье.

Поэтому я решил создать WordPress-фильтр, который будет находить определенные секции записи и автоматически конвертировать угловые скобки в их числовой эквивалент.

С помощью специального фильтра WordPress, мы сможем нормально отображать примеры html-кода в статьях и комментариях, внутри тегов <code>&lt;pre&gt;</code>.

<h3>Фильтры WordPress</h3>
Из Кодекса:

<blockquote><em>Фильтры – это функции, через которые WordPress пропускает данные, в определенные моменты исполнения, до того, как с ними будут произведены какие-то действия (такие как добавление в базу данных или отображение в окне браузера).</em></blockquote>

Итак, мы создадим специальный фильтр, который будет отыскивать контент, находящийся внутри тэгов <code>&lt;pre&gt;</code>, и конвертировать код, прежде чем отображать его на экране.

<h3>Специальный WordPress HTML фильтр</h3>
Вот так выглядит код фильтра:

[php]
&lt;?php
function mish_code_filter($content_text) {
    $content_text = preg_replace('!(&lt;pre.*?&gt;)(.*?)&lt;/pre&gt;!ise', &quot; '$1' .  stripslashes( str_replace(array('&lt;','&gt;'),array('&amp;lt;','&amp;gt;'),'$2') )  . '&lt;/pre&gt;' &quot;, $content_text);
    return $content_text;
    }

add_filter('the_content','mish_code_filter', 1, 1);
?&gt;
[/php]

Теперь, давайте разберем код на части. Сначала мы создаем новую функцию, под названием “<code>mish_code_filter</code>”:

[php]
function mish_code_filter($content_text) {
    &lt;!-- function actions --&gt;
    }
[/php]

Далее, мы описываем, что будет делать функция. В нашем примере, мы используем PHP-функцию <code>preg_replace()</code>, которая будет отыскивать текст внутри тэгов <code>&lt;pre&gt;</code>…

[php]
$content_text = preg_replace('!(&lt;pre.*?&gt;)(.*?)&lt;/pre&gt;!ise',
[/php]

…и заменять их на зашифрованный текст:

[php]
&quot; '$1' .  stripslashes( str_replace(array('&lt;','&gt;'),array('&amp;lt;','&amp;gt;'),'$2') )  . '&lt;/pre&gt;' &quot;,
[/php]

Вторая часть функции <code>preg_replace()</code>, использует две PHP-функции: <code>stripslashes()</code> и <code>str_replace()</code>.

<strong><code>stripslashes()</code> </strong>удаляет обратные слэши (\), которые добавляет WordPress, до того как вставляет запись в базу данных. Обычно, WordPress самостоятельно удаляет эти слэши, до того как вывести контент на экран, но поскольку наш фильтр инициализируется до того как данные будут отображены, эта функция обязательна.

<strong><code>str_replace() </code></strong>– ищет угловые скобки и заменяет их на символьные объекты.

<code>$1</code> и <code>$2</code> – это значения выражения, где <code>$1 = (&lt;pre.*?&gt;)</code> и <code>$2 = (.*?)</code>.

Последняя часть функции возвращает значение (результат) функции, чтобы мы могли его использовать:

[php]
return $content_text;
[/php]

Теперь, нам нужно внедрить наш фильтр в WordPress, так, чтобы он срабатывал в определенное время. В нашем случае, мы внедрим фильтр, внутрь фильтра «t<code>he_content</code>»:

[php]
add_filter('the_content','mish_code_filter', 1, 1);
[/php]

Фильтр “<code>the_content</code>”, как нетрудно догадаться, используется для фильтрации записей, после того, как они получены из базы данных и до того, как они выведены на экран. Поэтому, в нашем случае, мы сообщаем вордпрессу, о том, что наш фильтр (<code>mish_code_filter</code>) нужно использовать совместно с фильтром “<code>the_content</code>”.

Первая единица в годе, говорит WordPress, о том, что фильтр имеет высокий приоритет и должен быть выполнен раньше любых, других фильтров. Вторая единица говорит WordPress, о том, что мы передаем нашему фильтру только 1 параметр.

<h3>Установка Фильтра</h3>
Откройте ваш файл <em>functions.php</em> (расположен в папке с вашей темой), и вставьте туда следующий код:

[php]
&lt;?php
function mish_code_filter($content_text) {
    $content_text = preg_replace('!(&lt;pre.*?&gt;)(.*?)&lt;/pre&gt;!ise', &quot; '$1' .  stripslashes( str_replace(array('&lt;','&gt;'),array('&amp;lt;','&amp;gt;'),'$2') )  . '&lt;/pre&gt;' &quot;, $content_text);
    return $content_text;
    }

add_filter('the_content','mish_code_filter', 1, 1);
?&gt;
[/php]

<h3>Фильтр для Комментариев</h3>

Наш фильтр также можно использовать для фильтрации html, в тексте комментариев, для этого понадобятся совсем небольшие изменения. Первое, что нам нужно сделать – это заменить фильтр «<code>the_content</code>», на фильтр «<code>comment_text»</code>, который выполняет ту же функцию, только для текста комментариев.

Ну и второе, необязательное изменение – теги <code>&lt;pre&gt;</code> мы заменим на теги <code>&lt;code&gt;</code>, так как они чаще используются в тексте комментариев. В результате у нас получится вот такой фильтр:

[php]
function mish_code_filter($content_text) {
    $content_text = preg_replace('!(&lt;code.*?&gt;)(.*?)&lt;/code&gt;!ise', &quot; '$1' .  stripslashes( str_replace(array('&lt;','&gt;'),array('&amp;lt;','&amp;gt;'),'$2') )  . '&lt;/code&gt;' &quot;, $content_text);
    return $content_text;
    }

add_filter('comment_text','mish_code_filter', 1, 1);
[/php]

Устанавливается он точно так же, как фильтр контента. Вот и все, можете проверить – наш фильтр работает.

<h3>Плагины с похожей функциональностью</h3>
<ul>
	<li><a href="http://wordpress.org/extend/plugins/raw-html/">Raw HTML</a></li>
	<li><a href="http://wordpress.org/extend/plugins/wp-no-format/">WP No Format</a></li>
	<li><a href="http://wordpress.org/extend/plugins/sm-clean-wordpress/">Clean WordPress</a></li>
</ul>
Перевод статьи "<a href="http://www.martinish.com/blog/2009/08/adding-and-filtering-raw-html-in-wordpress-posts/">Adding and Filtering Raw HTML in WordPress Posts</a>", автор <strong>Martin</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/01/wordpress-adding-and-filtering-raw-html-in-post-and-comments/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>WordPress. Простой шорткод для постоянных ссылок</title>
		<link>http://dreamhelg.ru/2009/12/wordpress-simple-shortcode-for-permalinks/</link>
		<comments>http://dreamhelg.ru/2009/12/wordpress-simple-shortcode-for-permalinks/#comments</comments>
		<pubDate>Tue, 01 Dec 2009 12:48:19 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[shortcode]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1728</guid>
		<description><![CDATA[<p><img width="150" height="150" src="http://dreamhelg.ru/wp-content/uploads/2009/12/permalinkthumb.png" class="attachment-200x200 wp-post-image" alt="permalinkthumb" title="permalinkthumb" /></p>Сегодня, публикую перевод небольшой статьи о создании весьма полезного шорткода, кстати если вы еще не слышали о шорткодах, можете прочитать в моей <a href="http://dreamhelg.ru/2009/07/10-отличных-шорткодов-для-wordpress/">предыдущей</a> статье.

<p>Во время создания шаблона для WordPress, у вас может возникнуть необходимость указать ссылку на конкретную страницу прямо в шаблоне. Для этого есть специальная функция, которую вы можете использовать.</p><span id="more-1728"></span>

<strong>Плохой пример:</strong>

[php]
&lt;a href=&quot;/contact/&quot;&gt;Контакты&lt;/a&gt;
[/php]

<strong>Хороший пример:</strong>

[php]
&lt;a href=&quot;&lt;?php echo get_permalink(12); ?&gt;&quot;&gt;Контакты&lt;/a&gt;
[/php]

Здесь «12» - это ID нужной записи или страницы. Почему же этот способ правильней?
<ul>
	<li>ссылка будет работать, даже если вы измените структуру ссылок;</li>
	<li>ссылка будет работать, даже если сайт будет перенесен с субдомена (который вы использовали для тестирования) на домен верхнего уровня.</li>
</ul>

Используя вышеуказанную функцию, ссылки на ваши записи и страницы никогда не изменятся. Это очень удобно использовать, при работе с файлами нашей темы, но как насчет использования ссылок на страницах и записях в визуальном редакторе?

По умолчанию, мы не можем выполнять PHP-код внутри нашей страницы или записи, а следовательно нет возможности использовать функцию <code>get_permalink</code>. Что мы можем сделать, так это создать специальный <strong>шорткод</strong>, с точно такой же функциональностью. И вот он:

[php]
function permalink_thingy($atts) {
	extract(shortcode_atts(array(
		'id' =&gt; 1,
		'text' =&gt; &quot;&quot;  // значение по умолчанию, если ничего не указано
    ), $atts));
    
    if ($text) {
        $url = get_permalink($id);
        return &quot;&lt;a href='$url'&gt;$text&lt;/a&gt;&quot;;
    } else {
	   return get_permalink($id);
	}
}
add_shortcode('permalink', 'permalink_thingy');
[/php]

Этот шорткод можно использовать двумя способами:

<strong>Просто:</strong>

[php]
&lt;a href=&quot;[permalink id=49]&quot;&gt;Использование без текста&lt;/a&gt;
[/php]

Здесь вам нужно просто указать параметр id и шорткод вернет URL. Полученный URL можно использовать любым способом, например, если вам нужно присвоить ссылке определенный класс или еще для чего-нибудь.

<strong>С текстом:</strong>

[php]
[permalink id=49 text='providing text']
[/php]

Этот способ вернет полностью форматированную ссылку, с текстом, который вы указали.

Перевод статьи «<a href="http://digwp.com/2009/09/easy-shortcode-permalinks/">Easy Shortcode Permalinks</a>», автор <strong>Chris Coyier</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/12/wordpress-simple-shortcode-for-permalinks/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>WordPress. Создаем запись только для подписчиков RSS</title>
		<link>http://dreamhelg.ru/2009/11/create-post-only-for-your-rss-subscribers-in-wordpress/</link>
		<comments>http://dreamhelg.ru/2009/11/create-post-only-for-your-rss-subscribers-in-wordpress/#comments</comments>
		<pubDate>Tue, 03 Nov 2009 07:30:41 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1680</guid>
		<description><![CDATA[<p><img width="150" height="130" src="http://dreamhelg.ru/wp-content/uploads/2009/11/402.png" class="attachment-200x200 wp-post-image" alt="rss_icon" title="402" /></p>Для поощрения своих постоянных читателей, владельцам блогов иногда нужно создавать записи только для своих RSS-подписчиков. В сегодняшней статье вы узнаете, как это сделать с помощью WordPress.<span id="more-1680"></span>

Первое, что вам нужно сделать – это создать специальную рубрику, записи которой будут доступны только для RSS-подписчиков. Предположим, вы создали новую рубрику «Только по RSS».

После создания рубрики, вам нужно будет узнать ее <code>ID</code>. Это определяется очень просто, зайдите на страницу редактирования рубрики, и ее ID отобразится в адресной строке браузера.

Теперь, откройте файл вашей темы <em>functions.php</em> в любом редакторе. Если в вашей теме нет такого файла, создайте его. Добавьте следующий код в файл <em>functions.php</em>.

[php]
&lt;?php  
function excludeCategory($query)  
{  
    if($query-&gt;is_home | $query-&gt;is_archive )  
    $query-&gt;set('cat','-3');  
    return $query;  
}  
add_filter('pre_get_posts', 'excludeCategory');  
?&gt;  
[/php]

<code>pre_get_post</code> -  это специальный фильтр WordPress, который запускается до получения записей из базы данных. С помощью этого фильтра, мы исключаем, указанную выше рубрику со всех страниц кроме RSS-ленты. Обратите внимание, что для исключения рубрики, используется знак минус, перед <code>ID</code>.

Так что теперь, когда вы добавите запись  в рубрику «Только по RSS», она не отобразится на главной странице, странице рубрики, в тегах или архивах; эта запись будет доступна только вашим RSS-подписчикам.

И наконец, если вы используете в своей теме функцию <code>wp_list_categories()</code>, для отображения рубрик, вам необходимо передать параметр, исключающий нашу rss-рубрику из общего вывода.

[php]
wp_list_categories('exclude=3');  
[/php]

А если вдруг функция <code>wp_list_categories</code>, уже имеет какие-то параметры, то добавить еще один, можно с помощью знака &amp;.

[php]
wp_list_categories('show_count=1&amp;exclude=3');  
[/php]

Вот так довольно просто, можно создавать статьи только для читателей RSS-ленты. Если вы знаете еще какие-то способы реализации такой задачи, расскажите о них.

Перевод статьи "<a href="http://webdeveloperplus.com/wordpress/create-post-only-for-your-rss-subscribers-in-wordpress/">Create Post Only For Your RSS Subscribers in WordPress</a>"]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/11/create-post-only-for-your-rss-subscribers-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

