<?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://anton.shevchuk.name/category/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://anton.shevchuk.name</link>
	<description>Web-разработчик</description>
	<lastBuildDate>Wed, 01 Feb 2012 12:54:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Порадуй своих читателей</title>
		<link>http://anton.shevchuk.name/wordpress/extend-your-rss/</link>
		<comments>http://anton.shevchuk.name/wordpress/extend-your-rss/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 14:52:44 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=1581</guid>
		<description><![CDATA[Перед вами результат опроса пользователей хабра, который я проводил в начале октября, а в продолжении публикации &#8212; плагин для WordPress, который удовлетворяет всем, ну я так надеюсь ;) Плагин получился у меня простой, он выполняет следующие махинации: Добавляет второй RSS канал, в котором публикуются лишь анонсы статей В &#171;полном&#187; RSS позволяет использовать &#60;!&#8211;more&#8211;&#62; второй раз, [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://anton.shevchuk.name/wp-content/uploads/2010/10/votes.png" alt="" title="Голосование" width="400" height="178" class="aligncenter size-full wp-image-1582" /><br />
Перед вами результат опроса пользователей хабра, который я проводил в начале октября, а в продолжении публикации &mdash; плагин для WordPress, который удовлетворяет всем, ну я так надеюсь ;)</p>
<p><span id="more-1581"></span></p>
<p>Плагин получился у меня простой, он выполняет следующие махинации:</p>
<ul>
<li>Добавляет второй RSS канал, в котором публикуются лишь анонсы статей</li>
<li>В &laquo;полном&raquo; RSS позволяет использовать &lt;!&#8211;more&#8211;&gt; второй раз, чтобы обрезать статью даже там</li>
</ul>
<p>Установка:</p>
<ol>
<li>Распакуйте <a href="http://wordpress.org/extend/plugins/a-rss-more/">архив с плагином</a> в директорию <em>/wp-content/plugins/a-rss-more</em></li>
<li>Активируйте плагин <em>(a) RSS More</em></li>
<li>Если ваша тема поддерживает <em>automatic-feed-links</em> то на этом всё</li>
<li>Если нет поддержки, идем в файл header.php и добавляем вручную ссылку на новый RSS</li>
</ol>
<pre class="brush: xml; title: ; notranslate">
&amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;Blog » Anounce Feed&amp;quot; href=&amp;quot;http://domain.com/feed/?announce=1&amp;quot; /&amp;gt;
&amp;lt;!-- or --&amp;gt;
&amp;lt;link rel=&amp;quot;alternate&amp;quot; type=&amp;quot;application/rss+xml&amp;quot; title=&amp;quot;Blog » Anounce Feed&amp;quot; href=&amp;quot;http://domain.com/?feed=rss2&amp;amp;announce=1&amp;quot; /&amp;gt;
</pre>
<p>Настройки:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2010/10/screenshot1.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2010/10/screenshot1.png" alt="" title="Настройки" width="563" height="221" class="aligncenter size-full wp-image-1596" /></a></p>
<blockquote><p>На данный момент плагин <strike>не имеет никаких настроек, в дальнейшем постараюсь что-нибудь допилить</strike> допилен. И да, плагин уже установлен на моём блоге &mdash; подписываемся &mdash; <a href="http://feeds.feedburner.com/AntonShevchuk">http://feeds.feedburner.com/AntonShevchuk</a> (полная версия) или <a href="http://feeds.feedburner.com/Shevchuk">http://feeds.feedburner.com/Shevchuk</a> (анонсы)</p></blockquote>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li><a href="http://anton.shevchuk.name/javascript/a-slideshow-plugin-for-wordpress/" title="(a) Slideshow плагин для Wordpress">(a) Slideshow плагин для Wordpress</a></li><li><a href="http://anton.shevchuk.name/javascript/a-slideshow-jquery-plugin/" title="(a) Slideshow &#8211; jQuery плагин для организации слайд-шоу">(a) Slideshow &#8211; jQuery плагин для организации слайд-шоу</a></li><li><a href="http://anton.shevchuk.name/design/seductive-rss/" title="Аппетитная RSS иконка">Аппетитная RSS иконка</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/wordpress/extend-your-rss/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Создаем тему для WordPress за 10 минут&#8230;</title>
		<link>http://anton.shevchuk.name/wordpress/create-wordpress-theme-with-constructor/</link>
		<comments>http://anton.shevchuk.name/wordpress/create-wordpress-theme-with-constructor/#comments</comments>
		<pubDate>Fri, 16 Apr 2010 08:06:19 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[constructor]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=1204</guid>
		<description><![CDATA[Это промо-пост своего же продукта &#8211; темы Конструктор для WordPress&#8230; Спонсор поста: LTD-студия &#8211; разработка сайтов На этот раз я не буду просто перечислять все фичи темы, я расскажу о том, как быстро создать свою уникальную тему. Для начала я бы посоветовал все же определится с тематикой сайта, а так же желательно с палитрой цветов. [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/article.png" alt="" title="Wordpress Constructor Theme" width="400" height="334" class="aligncenter size-full wp-image-965" /><br />
Это промо-пост своего же продукта &#8211; <a href="http://wordpress.org/extend/themes/constructor">темы Конструктор для WordPress</a>&#8230;<br />
<span id="more-1204"></span></p>
<blockquote><p>Спонсор поста: LTD-студия &#8211; <a href="http://ltd-studio.com.ua" title="Разработка сайтов">разработка сайтов</a></p></blockquote>
<p>На этот раз я не буду просто перечислять <a href="http://code.google.com/p/wp-constructor/wiki/ConstructorFeature">все фичи темы</a>, я расскажу о том, как быстро создать свою уникальную тему. Для начала я бы посоветовал все же определится с тематикой сайта, а так же желательно с палитрой цветов. С тематикой &#8211; выберу что-то нейтральное &#8211; ведь лучше гор могут быть только горы&#8230;</p>
<p>Затем следует заняться поиском клипарта для сайта, но поскольку наш бюджет ограничен $0.00, то будем использовать свободные источники &#8211; предпочитаю <a href="http://www.flickr.com/">flickr</a> &#8211; т.к. есть возможность поиска картинок под CC лицензией:</p>
<p><img src="http://anton.shevchuk.name/wp-content/uploads/2010/04/search_options-598x640.png" alt="" title="Flickr Search Options" width="598" height="640" class="aligncenter size-medium wp-image-1219" /></p>
<p>Из всего многообразия выбрал следующую картинку (слегка ее причесал, по-полам разделил, но особо не заморачивался):<br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2010/04/preview.jpg" alt="" title="Theme Background" width="700" height="424" class="aligncenter size-full wp-image-1220" /></p>
<p>Разрезав &#8211; залил в тему:</p>
<p><img src="http://anton.shevchuk.name/wp-content/uploads/2010/04/settings-images.jpg" alt="" title="Settings: images" width="700" height="518" class="aligncenter size-full wp-image-1223" /></p>
<p>Для формировании палитры можно использовать один из следующих сайтов (за основу палитры брал картинку выше):</p>
<ul>
<li><a href="http://www.degraeve.com/color-palette/">http://www.degraeve.com/color-palette/</a></li>
<li><a href="http://www.colorhunter.com/">http://www.colorhunter.com/</a></li>
</ul>
<p>У меня получилась следующая:<br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2010/04/palette.png" alt="" title="Theme Palette" width="464" height="108" class="aligncenter size-full wp-image-1221" /></p>
<p>Переносим ее в настройки темы:<br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2010/04/settings-colors.jpg" alt="" title="Settings: colors" width="700" height="365" class="aligncenter size-full wp-image-1222" /></p>
<p>Немного шаманим с CSS:</p>
<pre class="brush: css; title: ; notranslate">
/* увеличиваем шрифт в заголовке, и чуть-чуть смещаем вниз */
#name {
    margin-top:40px !important;
    font-size:112px !important;
    text-shadow: 0px 0px 4px #777;
}
#description {
    font-size:24px !important;
    font-weight:900;
    text-indent:24px;
}
/* добавляем к ссылкам навигации по паре полосок */
.navigation div {
    margin:0 0 8px;
}
.navigation div a {
    height:24px;
}
.navigation .alignright a {
    border-left: 4px solid #147dbe;
    margin:0 16px 0 0;
    padding-left:8px;
}
.navigation .alignleft a {
    border-right: 4px solid #147dbe;
    margin:0 0 0 16px;
    padding-right:8px;
}
/* изменяем шрифт в футере, чтобы не терялся текст на цветном фоне */
#footer .widget h3,
#footer .widget a {
    color:#fff;
    font-weight:900;
    text-shadow: 0px 0px 1px #333;
}
</pre>
<p>Применяем изменения. После получения удовлетворения от проделанной работы, лучше сохранить тему под своим именем:<br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2010/04/settings-save.jpg" alt="" title="Settings: save" width="700" height="383" class="aligncenter size-full wp-image-1224" /></p>
<p>Всё. У вас своя <a href="http://code.google.com/p/wp-constructor/downloads/list?can=3&#038;q=mountains">уникальная тема</a>:</p>
<p><img src="http://anton.shevchuk.name/wp-content/uploads/2010/04/screenshot.jpg" alt="" title="Screenshot" width="700" height="497" class="aligncenter size-full wp-image-1226" /></p>
<p>Еще полезные сайты &#8211; тут можно скачать текстуры и шаблоны:</p>
<ul>
<li><a href="http://www.w3avenue.com/2009/07/14/free-pattern-and-texture-resources-for-web-designers/">Free Pattern and Texture Resources For Web Designers</a> &#8211; список ресурсов</li>
<li><a href="http://ru-ru.colourlovers.com/patterns/add">COLOURlovers</a> &#8211; генератор текстурок</li>
</ul>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li><a href="http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress-updated/" title="Тема-Конструктор для Wordpress (обновление)">Тема-Конструктор для Wordpress (обновление)</a></li><li><a href="http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress/" title="Тема-Конструктор для Wordpress">Тема-Конструктор для Wordpress</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/wordpress/create-wordpress-theme-with-constructor/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>WordPress Quick Tricks #02. Оптимизация</title>
		<link>http://anton.shevchuk.name/wordpress/wordpress-quick-tricks-02-optimization/</link>
		<comments>http://anton.shevchuk.name/wordpress/wordpress-quick-tricks-02-optimization/#comments</comments>
		<pubDate>Wed, 27 Jan 2010 09:38:52 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Quick Tricks]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=1101</guid>
		<description><![CDATA[WordPress &#8211; одна из самых популярных CMS, но что мешает накидать им несколько камней в огород? Основная проблема возникающая с WordPress &#8211; это производительность, вы о ней не будете вспоминать достаточно долго &#8211; ну пока посещения вашего блога не перевалят за тысячу, а то и за две в сутки. После &#8211; к вам начнет стучать [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://anton.shevchuk.name/wp-content/uploads/2010/01/wordpress_speedup.jpg" alt="" title="Wordpress SpeedUp" width="420" height="225" class="aligncenter size-full wp-image-1158" /></p>
<p>WordPress &#8211; одна из самых популярных CMS, но что мешает накидать им несколько камней в огород?<br />
<span id="more-1101"></span></p>
<p>Основная проблема возникающая с WordPress &#8211; это производительность, вы о ней не будете вспоминать достаточно долго &#8211; ну пока посещения вашего блога не перевалят за тысячу, а то и за две в сутки. После &#8211; к вам начнет стучать хостер, и вещать, что мешаете жить соседям по хостингу, что тариф надо менять, и давайте арендуйте выделенный сервер под свой блог&#8230; <em>бла-бла-бла</em>&#8230;</p>
<p>Дабы было наглядней &#8211; продемонстрирую график использования памяти wordpress&#8217;ом, который построил <a href="http://maxsite.org/page/evoljucii-wordpress-posvjashhaetsja">Макс</a>:</p>
<p><img src="http://anton.shevchuk.name/wp-content/uploads/2010/01/memory-usage-wordpress.png" alt="" title="Memory Usage WordPress" width="650" height="641" class="aligncenter size-full wp-image-1159" /></p>
<h3>Кэшируем</h3>
<p>Вначале мой взгляд упал на репозиторий плагинов WordPress, я вытащил оттель <a href="http://wordpress.org/extend/plugins/wp-super-cache/">WP Super Cache</a> плагин &#8211; хостингу конечно полегчало &#8211; но не так, чтобы супер, ведь до начала работы данного плагина, двиг WP должен таки подняться. Потом нашел <a href="http://maxsite.org/page/maxsite-cache">MaxCache</a>, смысл данного кеширования &#8211; определять попадание в кэш до загрузки WP, и этот прирост производительности стал существенным &#8211; LA сервера упал с ~1.0-1.6 до ~0.2-0.4, памяти кушать стали тоже меньше &#8211; 634Mb > 525Mb.</p>
<h3>Отключаем плагины</h3>
<p>Кроме самого движка, очень солидную часть нагрузки создают кривые и не очень плагины. Пока у меня на примете лишь два плагина, которые я благополучно отключил:</p>
<ul>
<li>Akismet &#8211; алгоритм данной защиты предполагает отправку комментариев на сервис для проверки &#8211; но при >200 спам комментариев &#8211; это напрягает</li>
<li>WP-PostViews &#8211; это просто примочка &#8211; смысл работы &#8211; после загрузки страницы AJAX&#8217;ом стучится на сервер для инкрементации счетчика &#8211; т.е. для отображения страницы у вас дважды поднимается движек WP</li>
</ul>
<p>Если сталкивались с еще какими &#8220;чудными&#8221; плагинами &#8211; отпишитесь в комментариях&#8230;</p>
<h3>Оптимизируем БД</h3>
<p>Небольшой запрос на удаление мусора из БД (взято <a href="http://blog.sjinks.org.ua/wordpress/304-removing-old-revisions-from-wordpress-database/">отсель</a>).</p>
<pre class="brush: sql; title: ; notranslate">
// удаляем ревизии постов и все, что с ними связано
DELETE `p`, `pm`, `c`, `tr`
    FROM `wp_posts` AS `p`
        LEFT JOIN `wp_postmeta` AS `pm`
            ON `p`.`ID` = `pm`.`post_id`
        LEFT JOIN `wp_comments` AS `c`
            ON `p`.`ID` = `c`.`comment_post_ID`
        LEFT JOIN `wp_term_relationships` AS `tr`
            ON `p`.`ID` = `tr`.`object_id`
    WHERE
        `p`.`post_type` = 'revision';

// запускаем встроенные механизмы оптимизации
OPTIMIZE TABLE
    `wp_posts`,
    `wp_postmeta`,
    `wp_comments`,
    `wp_term_relationships`;
</pre>
<h3>Защита</h3>
<p>Скажите &#8220;к чему это тут&#8221;, а нет &#8211; тут самое место &#8211; достаточно часто админка популярных блогов подвергается атаке, а это тоже забирает ресурсы. Как по мне &#8211; самый лучший способ &#8211; это правильно настроенный htaccess для директории /wp-admin/:</p>
<ul>
<li>Ограничить доступ по IP<br />
<html>order deny,allow<br />
deny from all<br />
allow from 255.255.255.255 </html>
</li>
<li>Добавить <a href="http://danneo.com/forum/showthread.php?t=614">аутентификацию средствами Apache</a></li>
</ul>
<h3>Клиентская оптимизация</h3>
<p>Ох, тут можно рассказывать очень много, я лишь скину ссылку на тематический сайт &#8211; <a href="http://webo.in/articles/">webo.in</a> &#8211; а там вы найдете много материала, копипастить нет смысла, скажу лишь так &#8211; данная оптимизация станет <strong>критичной</strong> уже при десятке тысяч посетителей, я же остановился на небольшой правке файла .htaccess:</p>
<pre class="brush: xml; title: ; notranslate">
# Enable ETag
FileETag MTime Size

# Enable Deflate
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/x-javascript

&lt;ifModule mod_expires.c&gt;
  ExpiresActive On
  ExpiresDefault &quot;access plus 1 seconds&quot;
  ExpiresByType text/html &quot;access plus 1 seconds&quot;
  ExpiresByType image/x-icon &quot;access plus 2592000 seconds&quot;
  ExpiresByType image/gif &quot;access plus 2592000 seconds&quot;
  ExpiresByType image/jpeg &quot;access plus 2592000 seconds&quot;
  ExpiresByType image/png &quot;access plus 2592000 seconds&quot;
  ExpiresByType text/css &quot;access plus 604800 seconds&quot;
  ExpiresByType text/javascript &quot;access plus 216000 seconds&quot;
  ExpiresByType application/x-javascript &quot;access plus 216000 seconds&quot;
&lt;/ifModule&gt;
</pre>
<p>Результаты данного изменения отслеживал при помощи Firefox+Firebug+YSlow, вот собственно и скрины ДО и ПОСЛЕ изменений:</p>
<p><img src="http://anton.shevchuk.name/wp-content/uploads/2010/01/yslow-before.png" alt="" title="YSlow Before" width="670" height="230" class="aligncenter size-full wp-image-1160" /></p>
<p><img src="http://anton.shevchuk.name/wp-content/uploads/2010/01/yslow-after.png" alt="" title="YSlow After" width="670" height="230" class="aligncenter size-full wp-image-1161" /></p>
<p>P.S. Кстати, хостинг у меня теперь украинский, и сайт, для основной части аудитории, теперь будет просто летать&#8230;</p>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li><a href="http://anton.shevchuk.name/wordpress/wordpress-quick-tricks-01-ajax-and-more/" title="Wordpress Quick Tricks #01. AJAX и не только">Wordpress Quick Tricks #01. AJAX и не только</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/wordpress/wordpress-quick-tricks-02-optimization/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>WordPress Quick Tricks #01. AJAX и не только</title>
		<link>http://anton.shevchuk.name/wordpress/wordpress-quick-tricks-01-ajax-and-more/</link>
		<comments>http://anton.shevchuk.name/wordpress/wordpress-quick-tricks-01-ajax-and-more/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 07:01:38 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Quick Tricks]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=1126</guid>
		<description><![CDATA[Пишу в блог, чтобы не забыть, да и моим читателем будет интересно&#8230; Реализация AJAX в плагинах/темах Реализация AJAX&#8217;а при помощи jQuery для версий WordPress начиная с 2.6 по текущую: HTML часть будет выглядеть следующим образом: Непосредственный вызов: Реализация AJAX для админ панели С админкой всё на порядок проще, необходимо сделать следующии манипуляции в плагине: Ссылка: [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://anton.shevchuk.name/wp-content/uploads/2007/08/wordpress.png" alt="WordPress Logotype" title="WordPress Logotype" width="128" height="128" class="aligncenter size-full wp-image-56" /></p>
<p>Пишу в блог, чтобы не забыть, да и моим читателем будет интересно&#8230;<br />
<span id="more-1126"></span></p>
<h2>Реализация AJAX в плагинах/темах</h2>
<p>Реализация AJAX&#8217;а при помощи jQuery для версий WordPress начиная с 2.6 по текущую:</p>
<pre class="brush: php; title: ; notranslate">
/**
 * Регистрируем переменные фильтра &quot;query_vars&quot;
 *
 * @param array $vars
 * @return array
 */
function plugin_query_vars($vars) {
    $vars[] = 'plugin_query';
    return $vars;
}
add_filter('query_vars', 'plugin_query_vars');

/**
 * Парсим запрос и что-то делаем
 *
 * @param $wp
 */
function plugin_parse_request($wp) {
    // что-то делаем если присутствует перменная &quot;plugin_query&quot; в запросе
    if (array_key_exists('plugin_query', $wp-&gt;query_vars)){
        switch ($wp-&gt;query_vars['plugin_query']) {
        	case 'option1':
               // что-то делаем
        	    break;
        	case 'option2':
                // делаем что-то другое
                break;
         }
        // die - дабы предотвратить дальнейшую работу WP
        die();
    }
}
// регестрируемся на хук wp
add_action('wp', 'plugin_parse_request');

// не забываем подключить jQuery
wp_enqueue_script('jquery');
</pre>
<p>HTML часть будет выглядеть следующим образом:</p>
<pre class="brush: php; title: ; notranslate">
&lt;a href=&quot;&lt;?php echo get_bloginfo('wpurl') ?&gt;&quot; id=&quot;ajax&quot;&gt;AJAX Link&lt;/a&gt;
</pre>
<p>Непосредственный вызов:</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(document).ready(function($) {
// AJAX Link
$('#ajax').click(function(){
    var data = {
         'plugin_query':'option1'
    };
    $.post($(this).attr(&quot;href&quot;), data, function(response){
         // response ...
    });
    return false;
});
});
</pre>
<h2>Реализация AJAX для админ панели</h2>
<p>С админкой всё на порядок проще, необходимо сделать следующии манипуляции в плагине:</p>
<pre class="brush: php; title: ; notranslate">
// функция которая возвращает что-то...
function my_special_action() {
    // что-то делаем и что-то возвращаем
    $whatever = $_POST['whatever'];
    $whatever += 10;
    echo $whatever;
    // &quot;умираем&quot;
    die;
}
// хук вида wp_ajax_***
add_action('wp_ajax_my_special_action', 'my_special_action' );
</pre>
<p>Ссылка:</p>
<pre class="brush: php; title: ; notranslate">
&lt;a href=&quot;&lt;?php echo get_bloginfo('wpurl') ?&gt;&quot; id=&quot;ajax&quot;&gt;AJAX Link&lt;/a&gt;
</pre>
<p>JavaScript для вызова функции my_special_action:</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery(document).ready(function($) {
$('#ajax').click(function(){
    var data = {
        action: 'my_special_action',
        whatever: 1234
    };
    $.post(ajaxurl, data, function(response){
         // response ...
         alert('Сервер нам ответил: ' + response);
    });
    return false;
});
});
</pre>
<p>Для WordPress с версии 2.8 появился новый хук &#8220;wp_ajax_nopriv_my_action&#8221;:</p>
<pre class="brush: php; title: ; notranslate">
// залогиненный пользователь
add_action('wp_ajax_my_action', 'my_action_callback');
// гость
add_action('wp_ajax_nopriv_my_action', 'my_action_callback');
</pre>
<h2>Получить список файлов приаттаченных к посту</h2>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$attachment = get_children('post_parent='.$post-&gt;ID.'&amp;post_type=attachment'); 

if ($attachment) :?&gt;
&lt;div class=&quot;attachment&quot;&gt;
    &lt;ul&gt;
    &lt;?php foreach ($attachment as $file) : ?&gt;
        &lt;li&gt;&lt;a href=&quot;&lt;?php echo $file-&gt;guid ?&gt;&quot; title=&quot;&lt;?php echo $file-&gt;post_title ?&gt;&quot;&gt;&lt;?php echo $file-&gt;post_title ?&gt;&lt;/a&gt;&lt;/li&gt;
    &lt;?php endforeach; ?&gt;
    &lt;/ul&gt;
&lt;/div&gt;
&lt;?php endif;?&gt;
</pre>
<h2>Совместимость версий</h2>
<p>Если надо поддерживать старые версии WordPress&#8217;а:</p>
<pre class="brush: php; title: ; notranslate">
if (version_compare($wp_version, '2.8', '&lt;')) {
    // пишем функции для обратной своместимости
}
</pre>
<p>Если надо поддерживать PHP 4-ой версии (файлы берем из пакета <a href="http://pear.php.net/package/PHP_Compat">PEAR::PHP_Compat</a>):</p>
<pre class="brush: php; title: ; notranslate">
if (version_compare(phpversion(), '5.0.0', '&lt;')) {
    require_once 'compatibility/scandir.php';
    require_once 'compatibility/file_put_contents.php';
    require_once 'compatibility/file_get_contents.php';
}
</pre>
<h2>Ссылки по теме</h2>
<ul>
<li><a href="http://codex.wordpress.org/AJAX_in_Plugins">AJAX in Plugins</a></li>
<li><a href="http://xplus3.net/2008/10/27/jquery-and-ajax-in-wordpress-plugins-public-pages/">jQuery and Ajax in WordPress Plugins &#8211; Public Pages</a></li>
<li><a href="http://xplus3.net/2008/10/16/jquery-and-ajax-in-wordpress-plugins-administration-pages/">jQuery and Ajax in WordPress Plugins &#8211; Administration Pages</a></li>
</ul>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li><a href="http://anton.shevchuk.name/wordpress/wordpress-quick-tricks-02-optimization/" title="Wordpress Quick Tricks #02. Оптимизация">Wordpress Quick Tricks #02. Оптимизация</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/wordpress/wordpress-quick-tricks-01-ajax-and-more/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Тема-Конструктор для WordPress (обновление)</title>
		<link>http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress-updated/</link>
		<comments>http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress-updated/#comments</comments>
		<pubDate>Tue, 27 Oct 2009 05:37:52 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[constructor]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=1109</guid>
		<description><![CDATA[Тема &#8220;Constructor&#8221; изначально создавалась для пользователей, которые хотят быстро и без проблем создать свой уникальной дизайн блога. И судя по статистке она таки нашла своего пользователя, и далее небольшой обзор функционала. Подобный обзор своего творения я уже делал, но хотелось бы похвастаться прогрессом в разработке &#8211; как никак версия шагнула от 0.1.0 до 0.6.3 Темы [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/article.png" alt="Wordpress Constructor Theme" title="Wordpress Constructor Theme" width="400" height="334" class="aligncenter size-full wp-image-965" /></p>
<p>Тема &#8220;<a href="http://wordpress.org/extend/themes/constructor">Constructor</a>&#8221; изначально создавалась для пользователей, которые хотят быстро и без проблем создать свой уникальной дизайн блога. И судя по <a href="http://wordpress.org/extend/themes/constructor/stats/">статистке</a> она таки нашла своего пользователя, и далее небольшой обзор функционала.<br />
<span id="more-1109"></span></p>
<blockquote><p><a href="http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress/">Подобный обзор</a> своего творения я уже делал, но хотелось бы похвастаться прогрессом в разработке &#8211; как никак версия шагнула от 0.1.0 до 0.6.3</p></blockquote>
<h3>Темы</h3>
<p>Тема &#8220;Конструктор&#8221; поддерживает <a href="http://code.google.com/p/wp-constructor/wiki/ConstructorThemes">свои темы</a> (по умолчанию, в архиве идёт пять штук):</p>
<p><img src="http://wp-constructor.googlecode.com/svn/wiki/screenshot/themes.jpg" alt="Темы" width="700"/></p>
<p>Кроме этих тем, были добавлены <a href="http://code.google.com/p/wp-constructor/downloads/list">еще несколько</a>:</p>
<p><img src="http://wp-constructor.googlecode.com/svn/trunk/themes/ukraine/screenshot.png" alt="Ukraine" width="300" height="255" /><img src="http://wp-constructor.googlecode.com/svn/trunk/themes/naruto/screenshot.png" alt="Naruto" width="300" height="255" /></p>
<p><img src="http://wp-constructor.googlecode.com/svn/trunk/themes/sunrise/screenshot.png" alt="Sunrise" width="300" height="255" /><img src="http://wp-constructor.googlecode.com/svn/trunk/themes/pinup/screenshot.png" alt="Pinup" width="300" height="255" /></p>
<p>А еще есть тема &#8220;example&#8221; внутри которой лежит PSD файл, с помощью которого вы сможете легко создать свою тему (внутри уже нарезанная PSDшка &#8211; осталось найти необходимый клипарт и сохранить для web).</p>
<p>Кстати, что же из себя представляет &#8220;тема&#8221;? Тут всего три файла да картинки:</p>
<ol>
<li><strong>style.css</strong> &#8211; описание стилей</li>
<li><strong>config.php</strong> &#8211; конфигурация системы</li>
<li><strong>screenshot.png</strong> &#8211; скриншот темы, размером 300х255</li>
</ol>
<p>Файл <strong>style.css</strong> можно оставить пустым, добавив лишь обязательную шапку (такую же, как и для обычной wordpress темы):</p>
<pre class="brush: css; title: ; notranslate">
/*
Theme Name: MY THEME
Theme URI: http://MY.THEME.COM/
Description: MY THEME DESCRIPTION
Version: 0.0.1
Author: MY NAME
Author URI: http://MY.SITE.COM/
*/
</pre>
<p>Файл <strong>config.php</strong> содержит все настройки темы, которые также можно изменить в админке:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
return array(
            &quot;sidebar&quot;   =&gt; 'right',          // расположение сайдбара
            'layout'    =&gt;  array(           // настройки макета
         	             'header'  =&gt; 140,   // высота шапки
                        'width'   =&gt; 1024,   // ширина контейнера
                        'sidebar' =&gt; 240,    // ширина сайдбара
                        'extra'   =&gt; 240,    // ширина дополнительного сайдбара
                        'home'    =&gt; 'default', // макет для главной страницы default/list/tile
                        'archive' =&gt; 'default', // ... для архивов
                        'search'  =&gt; 'default', // ... для поиска
                        'index'   =&gt; 'default',  // ... для остального
                                 ),
            &quot;title&quot;     =&gt; array(           // заголовок сайта
                        &quot;pos&quot; =&gt; 'left'     // - позиция
                        ),
            &quot;content&quot;   =&gt; array(        // контент
                        &quot;author&quot; =&gt; 0,   // - показывать ссылку на страницу автора
                        'thumb' =&gt;  array ('auto'   =&gt; false), // - автогенерация превьюшек для картинок
                        'list'  =&gt;  array (                    // настройки для макета list
                                           'filter' =&gt; false,  // - вырезать HTML теги
                                           'thumb'  =&gt; array ( 'pos' =&gt; 'left', 'noimage' =&gt; false, ), // - расположение превью и отображать ли картинку &quot;No Image&quot;
                                          ),
                        ),
            &quot;footer&quot;    =&gt; array(          //  текст в футере
                        &quot;text&quot; =&gt; null,
                        ),
            &quot;fonts&quot;     =&gt; array(          // шрифты (порядковый номер)
                        'header' =&gt; 0,     // - для заголовка
                        'body'   =&gt; 0,     // - для контента
                        ),
            &quot;menu&quot;     =&gt; array(          // настройки меню в шапке
                        &quot;flag&quot; =&gt; 1,      // - enable/disable
                        &quot;home&quot; =&gt; false,  // - ссылка на главную
                        &quot;rss&quot;  =&gt; false,  // - ссылка на RSS
                        &quot;search&quot; =&gt; true, // - форма поиска
                        &quot;pages&quot;      =&gt; array('depth'=&gt;1), // - отображать страницы
                        &quot;categories&quot; =&gt; array('depth'=&gt;1, 'group'=&gt;1) // - отображать категории
                        ),
            &quot;slideshow&quot; =&gt; array(        // Настройка слайдшоу
                        &quot;flag&quot; =&gt; 0,         // - enable/disable
                        &quot;layout&quot; =&gt; 'in',    // - внутри контейнера с контентом или над
                        &quot;showposts&quot; =&gt; 10,   // - отображаемое количество слайдов
                        &quot;metakey&quot; =&gt; 'thumb-slideshow', // - имя дополнительного поля из поста
                        &quot;id&quot; =&gt; null,        // - ID слайдшоу для плагина NextGenGallery
                        &quot;height&quot; =&gt; 200,     // - высота в px
                        &quot;onpage&quot; =&gt; false,   // - отображать слайдшоу на страницах
                        &quot;onsingle&quot; =&gt; false  // - отображать слайдшоу на постах
                        ),
            &quot;images&quot;   =&gt; array(             // настройка фоновых картинок
                        &quot;body&quot; =&gt; array('src'=&gt;'', 'pos'=&gt;'left top', 'repeat'=&gt;'repeat', 'fixed'=&gt;false),
                        &quot;wrap&quot; =&gt; array('src'=&gt;'themes/default/header.png', 'pos'=&gt;'center top', 'repeat'=&gt;'no-repeat', 'fixed'=&gt;false),
                        &quot;wrapper&quot;  =&gt; array('src'=&gt;'', 'pos'=&gt;'left top', 'repeat'=&gt;'no-repeat'),
                        &quot;sidebar&quot;  =&gt; array('src'=&gt;'', 'pos'=&gt;'right bottom', 'repeat'=&gt;'no-repeat'),
                        &quot;extrabar&quot; =&gt; array('src'=&gt;'', 'pos'=&gt;'right bottom', 'repeat'=&gt;'no-repeat'),
                        &quot;footer&quot;   =&gt; array('src'=&gt;'themes/default/footer.png', 'pos'=&gt;'right bottom', 'repeat'=&gt;'no-repeat'),
                        ),
            &quot;opacity&quot;   =&gt; 'light',     // прозрачность
            &quot;shadow&quot;    =&gt; true,        // тень
            &quot;color&quot;     =&gt; array(       // цвета
                        &quot;bg&quot;      =&gt; '#fff',
                        &quot;bg2&quot;     =&gt; '#fff5c5',
                        &quot;opacity&quot; =&gt; '#fff',
                        &quot;title&quot;   =&gt; '#333',
                        &quot;title2&quot;  =&gt; '#555',
                        &quot;text&quot;    =&gt; '#333',
                        &quot;text2&quot;   =&gt; '#aaa',
                        &quot;border&quot;  =&gt; '#aaa',
                        &quot;border2&quot; =&gt; '#999',

                        &quot;header1&quot;   =&gt; '#ff6600',
                        &quot;header2&quot;   =&gt; '#ff7711',
                        &quot;header3&quot;   =&gt; '#ff9933',
                        )
            );
</pre>
<p>Не пугайтесь &#8211; настройте тему и сделайте &#8220;экспорт&#8221; &#8211; система сама создаст для вас этот файл.</p>
<h3>Макет</h3>
<p>Можно выбирать из 6-ти возможных вариантов расположения сайдбаров, добавилась возможность изменить ширину основного контейнера, и сайдбаров по отдельности:<br />
<img src="http://wp-constructor.googlecode.com/svn/wiki/screenshot/sidebar.png" alt="Sidebar" width="700"/></p>
<h3>Шапка сайта</h3>
<p>В шапку сайта можно добавить выпадающее меню и изменить его содержимое (теперь можно использовать виджеты), отдельно изменяется расположение и цвет заголовка:<br />
<img src="http://wp-constructor.googlecode.com/svn/wiki/screenshot/header.png" alt="Header" width="700"/></p>
<h3>Подвал сайта</h3>
<p>В footer&#8217;e можно изменить лишь текст, пока более ничего не придумал:<br />
<img src="http://wp-constructor.googlecode.com/svn/wiki/screenshot/footer.png" alt="Footer" width="700"/></p>
<h3>Цвета</h3>
<p>Есть несколько глобальных цветов, которые можно изменять &#8211; это цвет шрифта, фона, границ и т.д., и еще можно выбрать &#8220;прозрачность&#8221; объектов:<br />
<img src="http://wp-constructor.googlecode.com/svn/wiki/screenshot/colors.png" alt="Colors" width="700"/></p>
<h3>Шрифты</h3>
<p>Со шрифтами особого разнообразия не получилось &#8211; есть набор пресетов, можно указать различные для заголовков и контента:<br />
<img src="http://wp-constructor.googlecode.com/svn/wiki/screenshot/fonts.png" alt="Fonts" width="700"/></p>
<h3>CSS</h3>
<p>Для продвинутых пользователей есть возможность изменять CSS конкретной темы (только права на доступ не забудьте изменить):<br />
<img src="http://wp-constructor.googlecode.com/svn/wiki/screenshot/css.png" alt="CSS" width="700"/></p>
<p>Ответы на многие вопросы по CSS доступны на странице <a href="http://code.google.com/p/wp-constructor/wiki/ConstructorFaq">F.A.Q</a>.</p>
<h3>Изображения</h3>
<p>Данная опция &#8211; для изощренных &#8211; вы можете устанавливать фоновые изображения для элементов страницы, задавать положение и выбирать опции повторения:<br />
<img src="http://wp-constructor.googlecode.com/svn/wiki/screenshot/images.png" alt="Images" width="700"/></p>
<h3>Слайдшоу</h3>
<p>Если Вы используете плагин <a href="http://wordpress.org/extend/plugins/nextgen-gallery/">NextGen Gallery</a>, то сможете с легкостью добавить слайд-шоу на главную страницу сайта, в новых версиях так же поддерживается построение слайдшоу из картинок указанных в дополнительных полях постов (по умолчанию используется thumb-slideshow):<br />
<img src="http://wp-constructor.googlecode.com/svn/wiki/screenshot/slideshow.png" alt="Slideshow" width="700"/></p>
<h3>Шаблоны страниц</h3>
<p>WordPress дает возможность пользователю задавать определенные шаблоны для страниц, в &#8220;Конструкторе&#8221; доступно пять дополнительных шаблонов:</p>
<ul>
<li>Архив &#8211; <a href="http://wp-constructor.googlecode.com/svn/wiki/screenshot/template-archive.png">template-archive.png</a></li>
<li>Авторы &#8211; <a href="http://wp-constructor.googlecode.com/svn/wiki/screenshot/template-authors.png">template-authors.png</a></li>
<li>Одна колонка &#8211; с отключенными сайдбарами</li>
<li>Для страниц с дочерними страницами &#8211; <a href="http://wp-constructor.googlecode.com/svn/wiki/screenshot/template-parent.png">template-parent.png</a></li>
<li>Карта сайта &#8211; <a href="http://wp-constructor.googlecode.com/svn/wiki/screenshot/template-sitemap.png">template-sitemap.png</a></li>
</ul>
<p>Еще есть один дополнительный шаблон:</p>
<ul>
<li>Персональная страница автора &#8211; <a href="http://wp-constructor.googlecode.com/svn/wiki/screenshot/template-author.png">template-author.png</a></li>
</ul>
<h3>Мультиязычность</h3>
<p>Благодаря возросшей популярности данной темы появилась поддержка нескольких языков:</p>
<ul>
<li>Английский &#8211; по умолчанию</li>
<li>Русский</li>
<li>Украинский &#8211; спасибо <a href="http://twitter.com/Baziak">Baziak</a> за помощь</li>
<li>Польский &#8211; спасибо <a href="http://chomikuj.pl/mummle/">mummle</a></li>
<li>Датский &#8211; спасибо <a href="http://wordpress.blogos.dk/s%C3%B8g-efter-downloads/?did=171">Georg S. Adamsen</a> () </li>
<li>Итальянский &#8211; спасибо <a href="http://people.unica.it/">gio gio</a></li>
<li>Французский &#8211; спасибо <a href="http://nicolas.loeuillet.org">Nicolas Loeuillet</a></li>
</ul>
<p>В скором времени еще добавиться перевод на немецкий. К сожалению, не все локализации обновлены до последней версии.</p>
<h3>Планы на будущее</h3>
<ul>
<li>Добавить виджетов заточенных под тему</li>
<li>Постараться обновлять файлы локализаций</li>
<li>Создать кэш для css.php</li>
<li>Добавить возможность экспорта всей темы в одном zip архиве</li>
<li>Создать видео-презентацию темы</li>
</ul>
<p>P.S. Для всех подписчиков на RSS ленту &#8211; используйте адрес <a href="http://anton.shevchuk.name/feed/">http://anton.shevchuk.name/feed/</a> &#8211; по нему Вы всегда найдете мою ленту, так же можете меня найти и в <a href="http://twitter.com/AntonShevchuk">twitter’e</a>&#8230;</p>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li><a href="http://anton.shevchuk.name/wordpress/create-wordpress-theme-with-constructor/" title="Создаем тему для Wordpress за 10 минут&#8230;">Создаем тему для Wordpress за 10 минут&#8230;</a></li><li><a href="http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress/" title="Тема-Конструктор для Wordpress">Тема-Конструктор для Wordpress</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress-updated/feed/</wfw:commentRss>
		<slash:comments>133</slash:comments>
		</item>
		<item>
		<title>Добавляем тему в репозиторий WordPress</title>
		<link>http://anton.shevchuk.name/wordpress/add-theme-to-wordpress-repository/</link>
		<comments>http://anton.shevchuk.name/wordpress/add-theme-to-wordpress-repository/#comments</comments>
		<pubDate>Mon, 13 Apr 2009 16:55:52 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=953</guid>
		<description><![CDATA[Данный пост посвящен вопросу как добавить Вашу тему в репозиторий WordPress. Создание темы обычно начинатся с прочтения документации из кодекса wordpress, после Вам нужно будет взять список требований и внимательно пройтись по каждому пункту, отдельно уделив внимание на чек-лист. Отдельно стоит выделить следующие пункты: Style.css Файл стилей style.css &#8211; это первое с чем приходится сталкиваться [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img src="http://anton.shevchuk.name/wp-content/uploads/2007/08/wordpress.png" alt="WordPress Logotype" title="WordPress Logotype" width="128" height="128" class="aligncenter size-full wp-image-56" /></p>
<p>Данный пост посвящен вопросу как добавить Вашу тему в репозиторий WordPress.<br />
<span id="more-953"></span><br />
Создание темы обычно начинатся с прочтения <a href="http://codex.wordpress.org/Theme_Development">документации из кодекса wordpress</a>, после Вам нужно будет взять <a href="http://wordpress.org/extend/themes/about/#requirements">список требований</a> и внимательно пройтись по каждому пункту, отдельно уделив внимание на <a href="http://codex.wordpress.org/Theme_Development_Checklist">чек-лист</a>.<br />
Отдельно стоит выделить следующие пункты:</p>
<h3>Style.css</h3>
<p>Файл стилей style.css &#8211; это первое с чем приходится сталкиваться разработчику тем, к нему есть ряд требований. Первый пункт &#8211; файл style.css должен в обязательном порядке содержать шапку следующего формата:</p>
<pre class="brush: css; title: ; notranslate">
/*
Theme Name: Уникальное Имя Темы
Theme URI: http://ссылка-на-домашнюю-страницу-темы
Description: Описание темы, не должно содержать ссылки на спонсоров
Author: Ваше Имя
Author URI: http://ссылка-на-вашу-домашнюю-страницу
Template: название-темы-предка
Tags: теги темы - только из списка предлагаемого wordpress.org
Version: версия

Текс лицензии...

*/
</pre>
<p><strong>!</strong> Параметры Theme URI и Author URI должны быть различны, и ссылки должны быть живыми&#8230;</p>
<p>Пункт два &#8211; обязательные стили &#8211; внесите их сразу:</p>
<pre class="brush: css; title: ; notranslate">
.aligncenter,
div.aligncenter {
   display: block;
   margin-left: auto;
   margin-right: auto;
}

.alignleft {
   float: left;
}

.alignright {
   float: right;
}

.wp-caption {
   border: 1px solid #ddd;
   text-align: center;
   background-color: #f3f3f3;
   padding-top: 4px;
   margin: 10px;
   /* optional rounded corners for browsers that support it */
   -moz-border-radius: 3px;
   -khtml-border-radius: 3px;
   -webkit-border-radius: 3px;
   border-radius: 3px;
}

.wp-caption img {
   margin: 0;
   padding: 0;
   border: 0 none;
}

.wp-caption p.wp-caption-text {
   font-size: 11px;
   line-height: 17px;
   padding: 0 4px 5px;
   margin: 0;
}</pre>
<p>Советую так же определить стили для автогенерируемых классов (это пункт три):</p>
<pre class="brush: css; title: ; notranslate">
.categories {/*...*/}
.cat-item {/*...*/}
.current-cat {/* стиль текущей категории */}
.current-cat-parent {/* стиль для предка(ов) текущей категории */}
.pagenav {/* постраничная навигация */}
.page_item {/*...*/}
.current_page_item {/*...*/}
.current_page_parent {/*...*/}
.widget {/* все виджеты обернуты в сей класс */}
.widget_text {/*...*/}
.blogroll {/*...*/}
.linkcat{/*...*/}
</pre>
<p>Полезно будет почитать:</p>
<ul>
<li><a href="http://codex.wordpress.org/Theme_Development">Theme Development</a></li>
<li><a href="http://codex.wordpress.org/Styling_for_Print">Styling for Print</a></li>
<li><a href="http://codex.wordpress.org/Styling_for_Mobile">Styling for Mobile</a></li>
</ul>
<h3>Header</h3>
<p>Обычно это файл <b>header.php</b></p>
<ul>
<li>Должен быть указан DOCTYPE </li>
<li>Внутри тега &lt;head&gt; должна быть вызвана функции <strong>wp_head()</strong></li>
<li>Тег &lt;html&gt; должен содержать вызов функции <strong>language_attributes()</strong></li>
<li>Заголовок и описание сайта должны быть динамическими, т.е. используйте <strong>bloginfo(&#8216;name&#8217;)</strong> и <strong>bloginfo(&#8216;description&#8217;)</strong></li>
</ul>
<p>Пример шапки:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
/**
 * @package WordPress
 * @subpackage Theme Name
 */
?&gt;
&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &lt;?php language_attributes(); ?&gt;&gt;
&lt;head profile=&quot;http://gmpg.org/xfn/11&quot;&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;&lt;?php bloginfo('html_type'); ?&gt;; charset=&lt;?php bloginfo('charset'); ?&gt;&quot; /&gt;
    &lt;title&gt;&lt;?php wp_title(''); ?&gt;&lt;/title&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;&lt;?php bloginfo('stylesheet_url'); ?&gt;&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
    &lt;link rel=&quot;alternate&quot; type=&quot;application/rss+xml&quot; title=&quot;&lt;?php bloginfo('name'); ?&gt; RSS Feed&quot; href=&quot;&lt;?php bloginfo('rss2_url'); ?&gt;&quot; /&gt;
    &lt;link rel=&quot;alternate&quot; type=&quot;application/atom+xml&quot; title=&quot;&lt;?php bloginfo('name'); ?&gt; Atom Feed&quot; href=&quot;&lt;?php bloginfo('atom_url'); ?&gt;&quot; /&gt;
    &lt;link rel=&quot;pingback&quot; href=&quot;&lt;?php bloginfo('pingback_url'); ?&gt;&quot; /&gt;
    &lt;?php wp_get_archives('type=monthly&amp;format=link'); ?&gt;
    &lt;?php wp_head(); ?&gt;
&lt;/head&gt;
&lt;body&gt;
</pre>
<p><strong>!</strong> Хардкодить логотип сайта с текстом запрещено.</p>
<h3>Content</h3>
<p>За вывод информации отвечают файлы index.php, single.php, page.php и т.д., для проверки правильности отображения различной информации &#8211; добавьте &#8220;<a href="http://svn.automattic.com/wpcom-themes/test-data.2008-12-22.xml">рыбу</a>&#8221; в систему (Tools -&gt; Import).</p>
<ul>
<li>Обратите внимание на вывод списков, форм и встраиваемых элементов (аля видео с YouTube)</li>
<li>Внесите необходимые изменения в styles.css, как того требует кодекс: <a href="http://codex.wordpress.org/Using_Images#Styling_Images_in_WordPress">Styling_Images_in_WordPress</a> (чуть выше есть пример)</li>
<li>Используйте функцию <b>post_class()</b> для генерации правильных классов внутри &laquo;<a href="http://codex.wordpress.org/The_Loop">Цикла</a>&raquo;</li>
<li>Если добавлена большая картинка &#8211; контент должен скролится, либо скрываться &#8211; дабы не вылазить поверх сайдбара</li>
</ul>
<p>Небольшой пример файла index.php:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php if (have_posts()) : ?&gt;
        &lt;div id=&quot;posts&quot;&gt;
        &lt;!-- Тут главный Цикл WordPress'a--&gt;
        &lt;?php while (have_posts()) : the_post(); ?&gt;
            &lt;div &lt;?php post_class(); ?&gt; id=&quot;post-&lt;?php the_ID() ?&gt;&quot;&gt;
                 &lt;h2&gt;&lt;a href=&quot;&lt;?php the_permalink() ?&gt;&quot; rel=&quot;bookmark&quot; title=&quot;&lt;?php printf(__('Permanent Link to %s', 'Theme_Name'), the_title_attribute('echo=0')); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;&lt;/h2&gt;
                &lt;?php the_content(__('Read the rest of this entry &amp;raquo;', 'Theme_Name')) ?&gt;
                &lt;?php wp_link_pages(array('before' =&gt; '&lt;p class=&quot;pages&quot;&gt;&lt;strong&gt;'.__('Pages', 'constructor').':&lt;/strong&gt; ', 'after' =&gt; '&lt;/p&gt;', 'next_or_number' =&gt; 'number')); ?&gt;
                &lt;div class=&quot;footer&quot;&gt;
                    &lt;?php the_time(__('F jS, Y', 'Theme_Name')) ?&gt; |
                    &lt;?php the_tags(__('Tags', 'Theme_Name') . ': ', ', ', '|'); ?&gt;
                    &lt;?php edit_post_link(__('Edit', 'Theme_Name'), '', ' | '); ?&gt;
                    &lt;?php comments_popup_link(__('No Comments &amp;#187;', 'Theme_Name'), __('1 Comment &amp;#187;', 'Theme_Name'), __('% Comments &amp;#187;', 'Theme_Name'), '', __('Comments Closed', 'Theme_Name') ); ?&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;?php endwhile; ?&gt;
        &lt;/div&gt;
        &lt;div class=&quot;navigation&quot;&gt;
            &lt;?php next_posts_link(__('&amp;laquo; Older Entries', 'Theme_Name')) ?&gt;
            &lt;?php previous_posts_link(__('Newer Entries &amp;raquo;', 'Theme_Name')) ?&gt;
        &lt;/div&gt;
&lt;?php endif; ?&gt;
</pre>
<h3>Footer</h3>
<p>Это файл <b>footer.php</b></p>
<ul>
<li>До закрытия тега &lt;body&gt; должна быть вызвана функции <strong>wp_footer()</strong></li>
<li>В обязательном порядке должна быть ссылка на сайт wordpress.org, а так же можете добавить ссылку на свой сайт (но лишь одну, никаких спонсорских ссылок)</li>
</ul>
<p>Пример прост:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
/**
 * @package WordPress
 * @subpackage Theme Name
 */
?&gt;
&lt;?php wp_footer(); ?&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>!</strong> Тема не должна содержать никаких &laquo;спонсорских&raquo; ссылок</p>
<h3>Error 404</h3>
<p>При отсутствии результатов поиска должна выводиться соответствующая информация, для этой цели создайте файл 404.php, либо подготовьте index.php для вывод сообщения об ошибке (но первый вариант мне больше нравится). </p>
<h3>Screenshot</h3>
<p>Тут требований не много:</p>
<ul>
<li>файл screenshot.png 300×225, и только PNG</li>
<li>это должен быть &laquo;живой&raquo; скрин, без добавления водяных знаков или иных граффических элементов</li>
</ul>
<p><strong>!</strong> Контент на скриншоте может быть любой, вот только adult контент не пробьется сквозь модерацию</p>
<h3>JavaScript</h3>
<ul>
<li>JavaScript в HTML должен быть правильно обрамлен (хотя лучше его и вовсе избегать):
<pre class="brush: xml; title: ; notranslate">&lt;script type=&quot;text/javascript&quot;&gt;
/* &lt;![CDATA[ */
// content of your Javascript goes here
/* ]]&gt; */
&lt;/script&gt;</pre>
</li>
<li>Для подключения внешнего JavaScript&#8217;a используйте функцию <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script">wp_enqueue_script</a> в файле function.php</li>
</ul>
<p><strong>!</strong> В самом WordPress идет достаточно много <a href="http://codex.wordpress.org/Function_Reference/wp_enqueue_script#Default_scripts_included_with_WordPress">JavaScript бибилотек</a> в комплекте &#8211; не тащите лишнее.</p>
<h3>Навигация</h3>
<ul>
<li>Следите за тем, чтобы у вас не было тупиковых страниц (пришел на страницу &#8211; а дальше нет ссылок)</li>
<li>Проверяйте правильность работы навигации, а так же правильность отображения кол-ва страниц/комментариев (если конечно используете не стандартные функции wordpress)</li>
<li>В файлах post.php, single.php (либо index.php если таковых нет) должен быть вызов функции <a href="http://codex.wordpress.org/Template_Tags/wp_link_pages">wp_link_pages</a> &#8211; сие необходимо для правильного отображения многостраничных элементов</li>
</ul>
<p>Советую почитать:</p>
<ul>
<li><a href="http://codex.wordpress.org/Good_Navigation_Links">Good Navigation Links</a></li>
<li><a href="http://codex.wordpress.org/Next_and_Previous_Links">Next and Previous Links</a></li>
<li><a href="http://codex.wordpress.org/Styling_Page-Links">Styling Page-Links</a></li>
</ul>
<p><strong>!</strong> Хардкодить ссылки на разделы сайта запрещено</p>
<h3>Comments</h3>
<p>Требования к комментариям предельно просты:</p>
<ul>
<li>Комментарии должны поддерживать сервис gravatar</li>
<li>Комментарии должны быть как для постов, так и для страниц</li>
<li>Пингбеки и трекбеки должны отображаться как и другие комментарии</li>
</ul>
<p>Если не хотите особо заморачиваться с комментариями &#8211; то можете использовать функцию <a href="http://codex.wordpress.org/Template_Tags/wp_list_comments">wp_list_comments</a> (WP 2.7+) :</p>
<pre class="brush: php; title: ; notranslate">
&lt;ol class=&quot;commentlist&quot;&gt;
&lt;?php wp_list_comments();?&gt;
&lt;/ol&gt;
</pre>
<p>А так же желательно стили подправить:</p>
<pre class="brush: css; title: ; notranslate">
.children { /*...*/ }
.commentlist { /*...*/ }
.commentlist .avatar { /* Поиздеваемся над аватаром */ }
.nocomments { /*...*/ }
.comment-author { /* Автора можно выделить */}

.thread-even, .even { /* Четный комментарий / четная ветвь дискуссии*/ }
.thread-odd, .odd { /* Нечетный комментарий / нечетная ветвь дискуссии */}
.alt { /* Альтернативный стиль - дублирует прыдущие */}
.depth-2,
.depth-4 { /* Стиль для определнной вложенности */}
</pre>
<blockquote><p><strong>Примечание</strong>: чтобы пройти автовалидацию &#8211; добавьте закомментированную строчку в index.php:<br />
<code lang="php">// get_avatar();</code>
</p></blockquote>
<h3>Widgets</h3>
<p>Поддержка виджетов является обязательным параметром для принятия темы в репозиторий. Включите несколько стандартных виджетов включая календарик и список категорий (вложенный с отображением кол-ва постов), а теперь приводите тему в надлежащий вид.</p>
<h3>Localization</h3>
<p>Будьте взрослыми &#8211; создавайте мультиязычные темы, ведь это достаточно просто, для этого советую прочесть статью &laquo;<a href="http://codex.wordpress.org/Translating_WordPress">Translating WordPress</a>&raquo;.</p>
<h3>Uploading</h3>
<p>После того как мы выполнили все требования &#8211; пора пробывать заливать Вашу тему в репозиторий, Вам надо будет пройти 2 проверки &#8211; ботом и человеком &#8211; с первым все понятно, данная проверка происходит на этапе загрузки архива (кстати парсер бота с багом) &#8211; о всех ошибках Вам сообщат сразу, а вот с модератором все сложнее, во-первых он может отказать в приеме темы не объяснив причин, во-вторых &#8211; просматривая тему он может и не выловить все ошибки разом, а будет растягивать удовольствие &#8211; каждая проверка может растянуться на сутки и более&#8230;</p>
<p>И еще &#8211; не стесняйтесь спрашивать причину отказа в принятии темы, Вам все расскажут и покажут&#8230;</p>
<p><strong>!</strong> Заливайте тему вечерком (18:00 GMT+0) &#8211; к полуночи тему просмотрят и добавят в репозиторий&#8230;</p>
<h3>P.S.</h3>
<p>Возможно что-то упустил, но вроде бы это все, с чем мне пришлось столкнутся при создании темы. На данный момент в репозитории WordPress.org лежит две мои темы:</p>
<ul>
<li><a href="http://wordpress.org/extend/themes/black-urban">Black Urban</a> &#8211; 	3,555 скачиваний</li>
<li><a href="http://wordpress.org/extend/themes/constructor">Constructor</a> &#8211; 3,974 скачиваний</li>
</ul>
<p>P.S. У меня уже 111 &#8220;последователей&#8221; на <a href="http://twitter.com/AntonShevchuk">Twitter&#8217;e</a>, возможно моя информация окажется полезной и для Вас.</p>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li>No Related Post</li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/wordpress/add-theme-to-wordpress-repository/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Тема-Конструктор для WordPress</title>
		<link>http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress/</link>
		<comments>http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 05:43:37 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[constructor]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=964</guid>
		<description><![CDATA[В продолжение моего wordpress-творчества представляю новую тему &#8211; Constructor. Это однозначно &#8220;темовая&#8221; тема, она представляет из себя конструктор тем, со следующим функционалом: Темы Данная тема поддерживает темы &#8211; как бы странно это не звучало &#8211; но это вполне юзабельно, и выглядит приблизительно так: Каждая тема представляет из себя файл настроек &#8211; config.php и файл стилей [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/article.png" alt="Wordpress Constructor Theme" title="Wordpress Constructor Theme" width="400" height="334" class="alignnone size-full wp-image-965" /></p>
<p>В продолжение моего wordpress-творчества представляю новую тему &#8211; Constructor.<br />
<span id="more-964"></span></p>
<p>Это однозначно &#8220;темовая&#8221; тема, она представляет из себя конструктор тем, со следующим функционалом:</p>
<h3>Темы</h3>
<p>Данная тема поддерживает темы &#8211; как бы странно это не звучало &#8211; но это вполне юзабельно, и выглядит приблизительно так:</p>
<p><a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/themes1.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/themes1-720x488.png" alt="Выбор темы" title="Выбор темы" width="720" height="488" class="aligncenter size-medium wp-image-993" /></a></p>
<p>Каждая тема представляет из себя файл настроек &#8211; <em>config.php</em> и файл стилей &#8211; <em>styles.css</em> (аналогично с обычными темами для wordpress). Если со вторым всё более-менее понятно, то первый представляет из себя следующее:</p>
<pre class="brush: php; title: ; notranslate">
return array(
            &quot;theme&quot;     =&gt; 'default', // имя темы
            &quot;sidebar&quot;   =&gt; 'right',   // макет
            &quot;title&quot;     =&gt; array(
                        &quot;pos&quot; =&gt; 'left'  // расположение заголовка
                    ),
            &quot;fonts&quot;     =&gt; array(    // шрифт заголовка и текста (см. admin/fonts.php)
                        'header' =&gt; 1,
                        'body'   =&gt; 1,
                    ),
            &quot;links&quot;     =&gt; array(     // настройки меню в шапке
                        &quot;type&quot; =&gt; 1,
                        &quot;home&quot; =&gt; false,
                        &quot;rss&quot;  =&gt; false,
                        &quot;size&quot; =&gt; false,
                    ),
            &quot;slideshow&quot; =&gt; array(  // настройки слайдшоу
                        &quot;id&quot; =&gt; null,
                        &quot;height&quot; =&gt; 200,
                        &quot;onpage&quot; =&gt; false,    // show slideshow on page
                        &quot;onsingle&quot; =&gt; false   // show slideshow on single post
                    ),
            &quot;images&quot;   =&gt; array(  // настройки фоновых изображений
                        &quot;body&quot; =&gt; array('src'=&gt;''),
                        &quot;wrap&quot; =&gt; array('src'=&gt;'','pos'=&gt;'center top'),
                        &quot;wrapper&quot; =&gt; array('src'=&gt;''),
                        &quot;sidebar&quot; =&gt; array('src'=&gt;'','pos'=&gt;'right bottom'),
                        &quot;footer&quot;  =&gt; array('src'=&gt;'','pos'=&gt;'left bottom'),
                    ),
            &quot;opacity&quot;   =&gt; 'light', // тип прозрачности
            &quot;color&quot;   =&gt; array(     // цвета элементов
                        &quot;bg&quot;      =&gt; '#fff',
                        &quot;bg2&quot;     =&gt; '#fff5c5',
                        &quot;title&quot;   =&gt; '#333',
                        &quot;title2&quot;  =&gt; '#555',
                        &quot;text&quot;    =&gt; '#333',
                        &quot;text2&quot;   =&gt; '#aaa',
                        &quot;border&quot;  =&gt; '#aaa',
                        &quot;border2&quot; =&gt; '#999',
                        &quot;header1&quot;   =&gt; '#ff6600',
                        &quot;header2&quot;   =&gt; '#ff7711',
                        &quot;header3&quot;   =&gt; '#ff9933',
                    ),
            );
</pre>
<h3>Макет</h3>
<p>Можно выбирать из 6-ти возможных вариантов расположения сайдбаров:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/layouts.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/layouts-719x390.png" alt="Выбор макета" title="Выбор макета" width="719" height="390" class="alignnone size-medium wp-image-979" /></a></p>
<h3>Шапка сайта</h3>
<p>Можно так же добавить выпадающее меню в шапку сайта, а так же изменить расположение и цвет заголовка:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/header.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/header-719x197.png" alt="Шапка сайта" title="Шапка сайта" width="719" height="197" class="alignnone size-medium wp-image-977" /></a></p>
<h3>Подвал сайта</h3>
<p>Мы можем с легкостью изменить текст в footer&#8217;e:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/footer.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/footer-720x113.png" alt="Подвал сайта" title="Подвал сайта" width="720" height="113" class="aligncenter size-medium wp-image-994" /></a></p>
<h3>Цвета</h3>
<p>Есть несколько глобальных цветов, которые можно изменять &#8211; это цвет шрифта, фона, границ и т.д.:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/colors.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/colors-719x294.png" alt="Изменение цветов" title="Изменение цветов" width="719" height="294" class="alignnone size-medium wp-image-974" /></a></p>
<h3>Шрифты</h3>
<p>Со шрифтами особого разнообразия не получилось &#8211; есть набор пресетов, можно указать различные для заголовков и контента:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/fonts.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/fonts-719x152.png" alt="Шрифты" title="Шрифты" width="719" height="152" class="alignnone size-medium wp-image-976" /></a></p>
<h3>CSS</h3>
<p>Для продвинутых пользователей есть возможность изменять CSS конкретной темы:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/css.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/css-719x352.png" alt="CSS" title="CSS" width="719" height="352" class="alignnone size-medium wp-image-975" /></a></p>
<h3>Изображения</h3>
<p>Данная опция &#8211; для изощренных &#8211; вы можете устанавливать фоновые изображения для элементов страницы:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/images.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/images-719x399.png" alt="Изменяем фоновые изображения" title="Изменяем фоновые изображения" width="719" height="399" class="alignnone size-medium wp-image-978" /></a></p>
<h3>Слайдшоу</h3>
<p>Если Вы используете плагин <a href="http://wordpress.org/extend/plugins/nextgen-gallery/">NextGen Gallery</a>, то сможете слегкостью добавить слайд-шоу на главную страницу сайта:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/slideshow.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/slideshow-719x144.png" alt="Слайд-шоу" title="Слайд-шоу" width="719" height="144" class="alignnone size-medium wp-image-980" /></a></p>
<h3>Экспорт</h3>
<p>Внеся изменения в текущую тему Вы можете сохранить сие в отдельный файл config.php, который достаточно легко можно превратить в новую тему:<br />
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/export.png"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/export-720x134.png" alt="Экспорт темы" title="Экспорт темы" width="720" height="134" class="aligncenter size-medium wp-image-995" /></a></p>
<p>В планах на будущее:</p>
<ul>
<li><del datetime="2009-10-03T10:52:38+00:00">Добавить слайдшоу содержащие последние посты</del></li>
<li><del datetime="2009-10-03T10:52:38+00:00">Добавить украинскую локализацию</del></li>
<li><del datetime="2009-03-17T15:54:30+00:00">Добавить возможность экспорта текущей темы</del></li>
<li>Добавить возможность экспорта текущей темы в ZIP архиве</li>
<li><del datetime="2009-03-02T14:02:20+00:00">Создать и добавить PSD файлы для быстрого создания тем для темы</del> &#8211; в версии 1.1.5</li>
</ul>
<p>Вот такое чудо у меня получилось, можете попробовать его на зуб:</p>
<p align="center">
<a href="http://wordpress.org/extend/themes/constructor" title="Constructor" class="download_button" onclick="javascript:pageTracker._trackPageview('/outbound/wordpress.org/extend/themes/constructor');"><span class="caption">Download</span><span class="version"> last version </span><span class="title">Constructor</span></a>
</p>
<p>P.S. Для всех подписчиков на RSS ленту &#8211; используйте адрес <a href="http://anton.shevchuk.name/feed/">http://anton.shevchuk.name/feed/</a> &#8211; по нему Вы всегда найдете мою ленту…</p>
<p>P.P.S. Ищите меня и на <a href="http://twitter.com/AntonShevchuk">twitter&#8217;e</a> &#8211; всегда свежие анонсы&#8230;</p>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li><a href="http://anton.shevchuk.name/wordpress/create-wordpress-theme-with-constructor/" title="Создаем тему для Wordpress за 10 минут&#8230;">Создаем тему для Wordpress за 10 минут&#8230;</a></li><li><a href="http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress-updated/" title="Тема-Конструктор для Wordpress (обновление)">Тема-Конструктор для Wordpress (обновление)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/wordpress/theme-constructor-for-wordpress/feed/</wfw:commentRss>
		<slash:comments>137</slash:comments>
		</item>
		<item>
		<title>Конкурс на лучшую тему для WordPress</title>
		<link>http://anton.shevchuk.name/wordpress/orange-fresh-theme/</link>
		<comments>http://anton.shevchuk.name/wordpress/orange-fresh-theme/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 09:56:52 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=952</guid>
		<description><![CDATA[Как понятно из анонса &#8211; сайт MyWordPress.RU проводит конкурс на самую лучшую русскую тему для WordPress, и я решил тоже поучаствовать &#8211; благо как раз закончил работу над новой темой&#8230; &#8220;Свежая&#8221; тема &#8220;Свежая&#8221; темка для WordPress, в противостояние темного и светлого, ранее не опубликованая, свеже-созданная, только из под пера&#8230; Что она из себя представляет можно [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/konkurs.jpg" alt="Конкурс MyWordPress.RU" title="Конкурс MyWordPress.RU" width="439" height="163" class="alignnone size-full wp-image-961" /></p>
<p><span id="more-952"></span><br />
Как понятно из анонса &#8211; сайт <a href="http://mywordpress.ru/konkurs/">MyWordPress.RU проводит конкурс</a> на самую лучшую русскую тему для WordPress, и я решил тоже поучаствовать &#8211; благо как раз закончил работу над новой темой&#8230;</p>
<h2>&#8220;Свежая&#8221; тема</h2>
<p>&#8220;Свежая&#8221; темка для WordPress, в противостояние <a href="http://wordpress.org/extend/themes/black-urban">темного</a> и светлого, ранее не опубликованая, свеже-созданная, только из под пера&#8230;</p>
<p>Что она из себя представляет можно просмотреть на следующих скринах (кликабельно):</p>
<p><a href="http://anton.shevchuk.name/wordpress/orange-fresh-theme/attachment/screenshot/" rel="attachment wp-att-958"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/screenshot-300x225.jpg" alt="Orange Theme" title="Orange Theme" width="300" height="225" class="alignnone size-medium wp-image-958" /></a></p>
<p><a href="http://anton.shevchuk.name/wordpress/orange-fresh-theme/attachment/screenshot-lime/" rel="attachment wp-att-959"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/screenshot-lime-300x225.jpg" alt="Lime Theme" title="Lime Theme" width="300" height="225" class="alignnone size-medium wp-image-959" /></a></p>
<p>Как видите существует две вариации темы &#8211;  Orange и Lime, кроме этого можно настроить расположение и количество сайдбаров в админской части (кликабельно):</p>
<p><a href="http://anton.shevchuk.name/wordpress/orange-fresh-theme/attachment/admin/" rel="attachment wp-att-960"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/admin-300x265.jpg" alt="Admin" title="Admin" width="300" height="265" class="alignnone size-medium wp-image-960" /></a></p>
<p>Данная тема идет с русской локализацией, хотелось бы так же создать и украинскую версию, но это уже в следующей версии&#8230;</p>
<h3>Внимание!</h3>
<blockquote><p>Данная тема не доступна для скачивания, т.к. участвует в конкурсе, по этой причине скачивание будет доступно лишь по окончанию конкурса.</p></blockquote>
<p><strong>P.S.</strong> Для всех подписчиков на RSS ленту &#8211; в связи с изменениями чудо-сервиса FeedBurner используйте адрес <a href="http://anton.shevchuk.name/feed/">http://anton.shevchuk.name/feed/</a> &#8211; по нему Вы всегда найдете мою ленту&#8230;</p>
<p><strong>P.P.S.</strong> Я теперь и на <a href="http://twitter.com/AntonShevchuk">twitter&#8217;e</a> &#8211; <del datetime="2009-02-13T10:30:02+00:00">follow me</del> следите за обновлениями, в них всегда много вкусного&#8230;</p>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li>No Related Post</li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/wordpress/orange-fresh-theme/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Креативный дизайн за 15 минут</title>
		<link>http://anton.shevchuk.name/wordpress/creative-design-in-15-minutes/</link>
		<comments>http://anton.shevchuk.name/wordpress/creative-design-in-15-minutes/#comments</comments>
		<pubDate>Wed, 04 Feb 2009 09:08:17 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[Photoshop]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=901</guid>
		<description><![CDATA[Поскольку время dial-up соеденений постепенно уходит в историю, то всё популярней становятся дизайны сайтов использующих большие картинки в качестве фонового изображения. Примеров тому множество, включая мой блог ;) А теперь небольшой туториал о том, как самому создать подобный дизайн за минимальное время. Для начала стоит определиться с тем &#8211; какая тематика Вашего блога &#8211; мой [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/article.jpg" alt="Дизайн за 15 минут" title="Дизайн за 15 минут" width="480" height="360" class="alignnone size-full wp-image-950" /></p>
<p>Поскольку время dial-up соеденений постепенно уходит в историю, то всё популярней становятся дизайны сайтов использующих большие картинки в качестве фонового изображения. Примеров тому <a href="http://www.webdesignerwall.com/trends/80-large-background-websites/">множество</a>, включая мой блог ;)<br />
<span id="more-901"></span></p>
<p>А теперь небольшой туториал о том, как самому создать подобный дизайн за минимальное время.</p>
<p>Для начала стоит определиться с тем &#8211; какая тематика Вашего блога &#8211; мой выбор пал на урбан-стайл &#8211; ибо модно, да и подойдет большинству тинейджеров.</p>
<p>Теперь стоит поискать соответствующие клипарты, шрифты и кисточки для Фотошопа (ну у нас действительно мало времени &#8211; уже полминуты прошло)&#8230;<br />
Для этого нам хватит 3-х запросов к гуглу:</p>
<ul>
<li><a href="http://www.google.com/search?q=urban+free+texture">free urban texture</a> &#8211; прийдем сюда &#8211; <a href="http://urbandirty.com/">http://urbandirty.com/</a></li>
<li><a href="http://www.google.com/search?q=free+photoshop+urban+brushes">free photoshop urban brushes</a> &#8211; тут много чего можно найти &#8211; но пришел сюда <a href="http://invisiblesnow.deviantart.com/art/Urban-Scrawl-Photoshop-Brushes-41545917">http://invisiblesnow.deviantart.com/</a></li>
<li><a href="http://www.google.com/search?q=free+urban+fonts">free urban fonts</a> &#8211; <a href="http://www.urbanfonts.com/">http://www.urbanfonts.com/</a></li>
</ul>
<p>Дабы особо не томить &#8211; мой выбор пал на следующие составляющие:</p>
<p>Текстура для фона:<br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/texture-small.jpg" alt="Текстура" title="Текстура" width="320" height="240" class="alignnone size-full wp-image-947" /></p>
<p>Шрифт аля графити:<br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/graffiti.png" alt="Шрифт Graffiti" title="Шрифт Graffiti" width="374" height="95" class="alignnone size-full wp-image-948" /></p>
<p>Кисточки урбан-стайл:<br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/brushes.jpg" alt="Urban Style Brushes" title="Urban Style Brushes" width="300" height="225" class="alignnone size-full wp-image-949" /></p>
<p>Теперь перейдем к рисованию (лучше совмещать чтение с просмотров слайдов):</p>
<ol>
<li>Открываем Photoshop и создаем новый файл размера 1280х1024</li>
<li>Перетаскиваем картинки в наш файл</li>
<li>Далее попер креатив &#8211; выбираем вначале слой содержащий текстуру для шапки сайта &#8211; заливаем его полупрозрачным градиентом &#8211; дабы скрыть границы (см. слой Body -> Gradient)</li>
<li>Затем выделяем место под наш заголовок, и опять заливаем черным</li>
<li>Таким же образом подготовим место под наш контент</li>
<li>Создаем надпись нашим модным шрифтом Graffiti</li>
<li>Теперь нарисуем кнопки под нашей шапкой, для этой цели нам понадобиться выделить кружок, залить его черным, нарисовать на нем иконку кисточкой из набора Urban Scrawl</li>
<li>Добавлю так же несколько графических элементов из того же набора кисточек &#8211; это стрелочки для постраничной анимации, облачко для подсказок, и пару совсем декоративных элементов</li>
<li>Используя инструмент Slice Tool разрежу такую заготовку на составные части &#8211; обратите внимание как много в себя включает верхня чать (header)</li>
</ol>
<p><a name="slides"></a><br />
<!--[slideshow][width:640,height:513,nextclick:true]--><br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/design-urban-style_step-1.jpg" alt="Текстура с градиентом" title="Текстура с градиентом" width="640" height="513" class="alignnone size-full wp-image-941" /><br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/design-urban-style_step-2.jpg" alt="Выделены две области" title="Выделены две области" width="640" height="513" class="alignnone size-full wp-image-942" /><br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/design-urban-style_step-3.jpg" alt="Заголовок" title="Заголовок" width="640" height="513" class="alignnone size-full wp-image-943" /><br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/design-urban-style_step-4.jpg" alt="Кнопки" title="Кнопки" width="640" height="513" class="alignnone size-full wp-image-944" /><br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/design-urban-style_step-5.jpg" alt="Декоративные элементы" title="Декоративные элементы" width="640" height="513" class="alignnone size-full wp-image-945" /><br />
<img src="http://anton.shevchuk.name/wp-content/uploads/2009/02/design-urban-style_step-6.jpg" alt="Порезанный дизайн" title="Порезанный дизайн" width="640" height="513" class="alignnone size-full wp-image-946" /><!--[/slideshow]--></p>
<p>На данный креатив я потратил чуть меньше 10 минут, теперь осталось все это срастить с WordPress&#8217;ом.</p>
<p>Начнем с HTML структуры:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;body&quot;&gt;
   &lt;div id=&quot;header&quot;&gt;
        &lt;a id=&quot;logo&quot; href=&quot;/&quot; title=&quot;Wordpress&quot;&gt;Wordpress&lt;/a&gt;
        &lt;a id=&quot;home&quot; href=&quot;/&quot; title=&quot;Home&quot;&gt;Home&lt;/a&gt;
        &lt;a id=&quot;online&quot; href=&quot;/online&quot; title=&quot;Online&quot;&gt;Online&lt;/a&gt;
        &lt;a id=&quot;archive&quot; href=&quot;/archive&quot; title=&quot;Archive&quot;&gt;Archive&lt;/a&gt;
        &lt;a id=&quot;rss&quot; href=&quot;/feed&quot;  title=&quot;RSS Feed&quot;&gt;RSS Feed&lt;/a&gt;
   &lt;/div&gt;
   &lt;div id=&quot;wrapper&quot;&gt;
   &lt;div id=&quot;container&quot;&gt;
            &lt;div id=&quot;posts&quot;&gt;
                   &lt;div class=&quot;post&quot;&gt;...&lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;
    &lt;div id=&quot;sidebar&quot;&gt;
         &lt;ul&gt;
             &lt;li&gt;...&lt;/li&gt;
         &lt;/ul&gt;
    &lt;/div&gt;
    &lt;div id=&quot;footer&quot;&gt;
         &lt;p class=&quot;clear copy&quot;&gt;&amp;copy; 2009 WordPress&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Основные махинации у нас происходят с тегом body и дивом с id=&#8221;body&#8221;:</p>
<pre class="brush: css; title: ; notranslate">
/* Большую картинку header.jpg мы размещаем вверху по центру  */
body {
    background: #000 url(images/header.jpg) 50% top no-repeat;
}
/* div c id=&quot;body&quot; распологаем по центру */
#body {
    width:1024px;
    margin:0 auto;
}
</pre>
<p>Если же Вы захотите добавить градиент для фона, то лучше всего это сделать добавив фоновое изображение к тегу с id=wrap (оный должен оборачивать div с id=body):</p>
<pre class="brush: css; title: ; notranslate">
#wrap {
    background: #ссс url(images/gradient.gif) repeat-x;
}
</pre>
<p>После данной операции у вас будет уже приемлемая заготовочка для дальнейшего сайта, и лучше будет начать с оформения &#8220;шапки&#8221; сайта &#8211; для начала выделим место под оную и спозиционируем все ссылки &#8220;абсолютно&#8221;:</p>
<pre class="brush: css; title: ; notranslate">
#header {
    height:320px;
    position:relative;
}

    #header a {
        position:absolute;
        display:block;
        width:72px;
        height:72px;
        text-indent:-9999%;
    }
</pre>
<p>Теперь каждую из кнопок на нашей фоновой картинке сделаем &#8220;живой&#8221; &#8211; нам надо будет разместить соответствующие ссылки в нужных местах:</p>
<pre class="brush: css; title: ; notranslate">
/* Оживим наш заголовок */
#logo {
    top:0;
    left:0;
    width:100% !important;
    height:96px !important;
}
/* Ссылка с домиком */
#home {
    top:210px;
    left:244px;
}
/* Ссылка со зведочкой */
#online {
    top:116px;
    left:370px;
}
/* Ссылка 42 */
#archive {
    top:200px;
    left:520px;
}
/* Ссылка на фид */
#rss {
    top:110px;
    left:700px;
}
</pre>
<p>Временно можете добавить border &#8211; дабы было удобнее позиционировать. Так же я добавил всплывающую подсказку для каждого элемента (как? &#8211; читайте в статье <a href="http://anton.shevchuk.name/html-and-css/web20-css-menu/">CSS меню для начинающих</a>).</p>
<p>Доведение темы до ума у меня заняло еще некоторое время, но теперь у меня уже есть заготовка, используя оную &#8211; разработка темы для WordPress у меня будет занимать не более пяти-десяти минут :)</p>
<p>Если Вам интересен результат то можете его скачать вместе с исходниками в PSD и необходимыми материалами:</p>
<p align="center">
<a href="http://anton.shevchuk.name/wp-content/uploads/2009/02/design-black-urban.zip" title="Black Urban Source" class="download_button" onclick="javascript:pageTracker._trackPageview('/downloads/design-black-urban.zip');"><span class="caption">Download</span><span class="version">4,77 Mb</span><span class="title">Black Urban</span></a>
</p>
<p>Ну и ссылка для тех, кто хочет пощупать лишь саму темку (да привью посмотреть):</p>
<p align="center">
<a href="http://wordpress.org/extend/themes/black-urban" title="Black Urban WordPress Theme" class="download_button" onclick="javascript:pageTracker._trackPageview('/outbound/wordpress.org/extend/themes/black-urban);"><span class="caption">Download</span><span class="version">0.2 version</span><span class="title">Black Urban</span></a>
</p>
<p>По мотивам <a href="http://www.webdesignerwall.com/tutorials/how-to-css-large-background/">How to: CSS Large Background</a></p>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li>No Related Post</li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/wordpress/creative-design-in-15-minutes/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>WordPress &#8211; стандарты кодирования плагинов</title>
		<link>http://anton.shevchuk.name/php/wordpress-plugins-standarts/</link>
		<comments>http://anton.shevchuk.name/php/wordpress-plugins-standarts/#comments</comments>
		<pubDate>Mon, 12 Jan 2009 08:56:37 +0000</pubDate>
		<dc:creator>Anton Shevchuk</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[WordPress]]></category>
		<category><![CDATA[standarts]]></category>

		<guid isPermaLink="false">http://anton.shevchuk.name/?p=761</guid>
		<description><![CDATA[Увлекшись написанием плагинов для WordPress&#8217;а составил правила хорошего тона&#8230; Соглашение по именованию С чего начинается плагин &#8211; с имени :), следовательно давайте вырабатаем правила именования плагинов: Не используем тупых префиксов вида wp_ иль wp- &#8211; мы и так знаем что файлы в каталоге http://wordpress.org/extend/plugins/ предназначены для wordpress&#8217;a Если хотите выделить Ваш плагин &#8211; добавьте оригинальный [...]]]></description>
			<content:encoded><![CDATA[<p align="center"><img src="http://anton.shevchuk.name/wp-content/uploads/2007/08/wordpress.png" alt="WordPress Logotype" title="WordPress Logotype" width="128" height="128" class="alignnone size-full wp-image-56" /></p>
<p>Увлекшись написанием плагинов для WordPress&#8217;а составил правила хорошего тона&#8230;<br />
<span id="more-761"></span></p>
<h2>Соглашение по именованию</h2>
<p>С чего начинается плагин &#8211; с имени :), следовательно давайте вырабатаем правила именования плагинов:</p>
<ul>
<li>Не используем тупых префиксов вида <strong>wp_</strong> иль <strong>wp-</strong> &#8211; мы и так знаем что файлы в каталоге <a href="http://wordpress.org/extend/plugins/">http://wordpress.org/extend/plugins/</a> предназначены для wordpress&#8217;a</li>
<li>Если хотите выделить Ваш плагин &#8211; добавьте оригинальный префикс/постфикс (я использую префикс <strong>(a)</strong> &#8211; правда не знаю насколько сие информативно)</li>
<li>Все имена классов и функций должны содержать имя Вашего плагина &#8211; дабы избежать конфликтов</li>
</ul>
<p>Всегда создавайте директорию с плагином, даже если он состоит из одного файла, возможно в дальнейшем Вы захотите расширить функционал, и вот уже одним файлом не обойтись, и создадите директорию &#8211; а это может ввести в ступор пользователей&#8230;</p>
<h2>readme.txt</h2>
<p>Обязательным для каждого плагина есть наличие файла <a href="http://wordpress.org/extend/plugins/about/readme.txt">readme.txt</a>, см.  описание синтаксиса <a href="http://daringfireball.net/projects/markdown/syntax">http://daringfireball.net/projects/markdown/syntax</a>. Проверить Ваше творение можно используя <a href="http://wordpress.org/extend/plugins/about/validator/">валидатор</a>.</p>
<p>Если Вы по каким-то причинам не заливаете свой плагин в репозиторий wordpress&#8217;a &#8211; то в любом случае создайте данный файл &#8211; многие скажут спасибо.</p>
<h2>Заголовок</h2>
<p>Это обязательный элемент плагина, не надо в нем сильно извращаться:</p>
<pre class="brush: php; title: ; notranslate">&lt;?php
/*
Plugin Name: Name Of The Plugin
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: A brief description of the Plugin.
Version: The Plugin's Version Number, e.g.: 1.0
Author: Name Of The Plugin Author
Author URI: http://URI_Of_The_Plugin_Author
*/
?&gt;</pre>
<h2>Стандарты кодирования</h2>
<p><a href="http://codex.wordpress.org/WordPress_Coding_Standards">Полноценных стандартов</a> от разработчиков я не видел &#8211; по этой причине использую <a href="http://framework.zend.com/manual/en/coding-standard.html">стандарты Zend Framework&#8217;a</a>, чего и Вам советую. (в примерах я не буду использовать коментарии для PHP Documentator&#8217;а &#8211; дабы сократить листинг сорцов).</p>
<p>И еще &#8211; наш плагин не должен вызывать ошибок (даже уровня <em>Notice</em>), так что при разработке включите отображение ошибок:</p>
<pre class="brush: php; title: ; notranslate">error_reporting(E_ALL);</pre>
<h2>Динамическая подгрузка файлов</h2>
<p>Подгружать сразу весь плагин, затем повесить все атцать хуков и ничего не сделать &#8211; такое поведение плагинов встречается часто, давайте будем умнее, для начала желательно убрать весь функционал по классам и файлам, и уже в функциях подгружать необходимые файлы:</p>
<pre class="brush: php; title: ; notranslate">
// добавим фильтр контента
add_filter('the_content', array('%PluginName%', 'the_content'), 1000);

class %PluginName% {

    var $some_variable;

    /**
     * filter fo the_content
     *
     * @return void
     */
    function the_content($content)
    {
         include_once 'class/Content.php';
         $Content = new %PluginName%_Content();
         return $Content-&gt;parseContent($content);
    }
}
</pre>
<p>Так же желательно вешать хуки отдельно для каждого состояния &#8211; см. <a href="http://codex.wordpress.org/Conditional_Tags">список</a>:</p>
<pre class="brush: php; title: ; notranslate">
if (is_admin()) {
    // хуки для админки
} else {
    // хуки для фронт-енда
}
// и так далее ...
</pre>
<p>Можно даже так:</p>
<pre class="brush: php; title: ; notranslate">
if (is_admin()) {
    include_once '%PluginName%_admin.php';
} else {
    include_once '%PluginName%_front.php';
}
// и так далее ...
</pre>
<h2>Переменные и пространство имен</h2>
<p>Поскольку пространство имен в PHP еще не реализовано (имеются ввиду стабильные версии), то с данной задачей нам поможет справиться статический класс объединяющий в себе все функции для хуков:</p>
<pre class="brush: php; title: ; notranslate">
add_action('%hook_name%', array('%PluginName%', '%hook_name%'));

class %PluginName% {

    var $some_variable;

    /**
     * some function description
     *
     * @return void
     */
    function %hook_name%()
    {
         // ...
    }
}
</pre>
<p>Или же обычный класс:</p>
<pre class="brush: php; title: ; notranslate">
// создаем сущность нашего класса
$PluginName = new %PluginName%();

add_action('%hook_name%', array($PluginName, '%hook_name%'));

class %PluginName% {

    var $some_variable;

    /**
     * some function description
     *
     * @return void
     */
    function %hook_name%()
    {
         // ...
    }
}
// удаляем переменную за ненадобностью
unset($PluginName);
</pre>
<p>При использование таблицы options (это функции <a href="http://codex.wordpress.org/Function_Reference/add_option">add_option</a>, <a href="http://codex.wordpress.org/Function_Reference/update_option">update_option</a>, <a href="http://codex.wordpress.org/Function_Reference/delete_option">delete_option</a>) следует так же использовать префикс из имени плагина, таким образом мы будем эмулировать namespace наших опций (по какой причине до этого не додумались разработчики я не знаю)&#8230;</p>
<p>Следуя данным советам мы избежим конфликтов с другими плагинами&#8230;</p>
<h2>Установка плагина</h2>
<p>Для инициализации системы есть хук <a href="http://codex.wordpress.org/Function_Reference/register_activation_hook">register_activation_hook</a>, используя его Вы сможете внести необходимые измения в БД (создать таблицы, внести изменения в options и т.д.). Поверьте &#8211; пользователь не всегда читаем readme.txt где будет написано, что необходимо после инициализации обязательно сохранить настройки плагина дабы значения по умолчанию были сохранены в БД&#8230;</p>
<h2>Настройки плагина</h2>
<p>Давайте не будет ломать красивую админку WordPress&#8217;a &#8211; настройки плагина должны быть расположены в соответствующем меню &#8211; <strong>Settings</strong> &raquo; <strong>%Plugin Name%</strong>.</p>
<p>Так же советую вынести страницу с настройками в отдельный файл с  информативным названием (к примеру <em>%PluginName%_options.php</em> либо <em>%PluginName%_settings.php</em>):</p>
<pre class="brush: php; title: ; notranslate">
if (is_admin()) {
    add_action('admin_menu', array('%PluginName%', 'adminMenu'));
}

class %PluginName% {
    function adminMenu()
    {
    	if (function_exists('add_options_page')) {
    		add_options_page('%PluginName%','%PluginName%', 'manage_options', '%PluginName%/%PluginName%_options.php') ;
    	}
    }
}
</pre>
<p>Чтобы всё было красиво &#8211; используйте стили прописанные в wp-admin/wp-admin.css &#8211; за такой подход Вам скажут спасибо&#8230;</p>
<h2>Деактивация плагина</h2>
<p>Если Вы при установке плагина вносите какие-либо изменения в БД или на файловой системе &#8211; то желательно подчистить сие после отключения плагина, в этом Вам поможет хук <a href="http://codex.wordpress.org/Function_Reference/register_deactivation_hook">register_deactivation_hook</a>.</p>
<h2>Кастомизация</h2>
<p>Добавляем CSS и JavaScript используя следующую конструкцию:</p>
<pre class="brush: php; title: ; notranslate">
// регистрируем наш CSS файл
wp_register_style('%PluginName%', get_option('siteurl') . '/wp-content/plugins/%PluginName%/%PluginName%.css');
// либо
wp_enqueue_style('%PluginName%', get_option('siteurl') . '/wp-content/plugins/%PluginName%/%PluginName%.css');

// регистрируем наш JS файл (с указанием зависимостей)
wp_register_script( '%PluginName%', get_option('siteurl') . '/wp-content/plugins/%PluginName%/%PluginName%.js', array('jquery'));
// либо
wp_enqueue_script( '%PluginName%', get_option('siteurl') . '/wp-content/plugins/%PluginName%/%PluginName%.js', array('jquery'));
</pre>
<p>Этот способ сработает отлично в том случае если данные методы будут находиться в хуке на <em>wp_head</em> либо <em>admin_head</em>, иначе вам самим надо будет вызвать метод <em>wp_print_styles</em> или <em>wp_print_scripts</em>, и передать им имя скрипта для вывода&#8230;</p>
<p>Так же не забываем о конфликтах, как их обойти почитайте в статье <a href="http://noteslog.com/post/how-to-load-javascript-in-wordpress-plugins/">How to load JavaScript in WordPress plugins</a></p>
<p>Если Ваш плагин имеет некое графическое оформление &#8211; и оное обычно изменяют под конкретную тему &#8211; то желательно сделать проверку на наличие CSS файла для нашего плагина в директории текущей темы:</p>
<pre class="brush: php; title: ; notranslate">
if (file_exists(TEMPLATEPATH.'/%PluginName%.css')) {
    wp_register_style('%PluginName%', get_bloginfo('template_directory') . '/%PluginName%.css');
} else {
    wp_register_style('%PluginName%', get_option('siteurl') . '/wp-content/plugins/%PluginName%/%PluginName%.css');
}
</pre>
<p>При создании CSS будьте очень внимательны, Ваш CSS файл не должен ломать текущий дизайн, так что опять &#8211; используйте либо префиксы, либо жесткую привязку:</p>
<pre class="brush: css; title: ; notranslate">
.%PluginName%-sidebar { /*...*/ }
#%PluginName% { /*...*/ }
#%PluginName% &gt; div { /*...*/ }
</pre>
<p>Не стоит так же забывать о том, что на внешний вид Вашего плагина может влиять CSS файл текущей темы &#8211; так что советую подчистить marging&#8217;и, padding&#8217;и и border&#8217;ы&#8230;</p>
<p>Вот такими  нехитрыми приемами мы облегчим жизнь себе и дизайнерам&#8230;</p>
<h2>Мультиязычность</h2>
<p>Не планируете делать мультиязычность, но тогда дайте возможность другим помочь Вам, подготовьте плагин к переводу, для этого достаточно будет создать файл локализация содержащий лишь Ваш язык, да использовать следующие функции для вывода текста:</p>
<pre class="brush: php; title: ; notranslate">
__('String', '%PluginName%');
_e('String', '%PluginName%');
_c('String', '%PluginName%');
__ngettext('String', 'Strings', $c, '%PluginName%')
</pre>
<p>Файлы перевода желательно так же помещать в отдельную директории language &#8211; дабы не засорять корневой каталог плагина&#8230;</p>
<p>Более подробную информацию смотрите на странице <a href="http://codex.wordpress.org/I18n_for_WordPress_Developers#I18n_for_theme_and_plugin_developers">I18n for WordPress Developers</a> </p>
<h2>Документация</h2>
<p>Если от пользователя требуется внести изменения в текущую тему &#8211; то желательно описать данный процес очень подробно &#8211; а не как обычно: &#8220;Вот этот код выведет то что Вы хотите&#8221;.</p>
<p>Кстати &#8220;вот этот код&#8221;, не должен вызывать ошибок если Ваш плагин будет отключен, так что не забываем обрамлять вызовы функций следующей конструкцией:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
if (function_exists('%FunctionName%')) {
    %FunctionName%();
}
?&gt;
</pre>
<p>Помните &#8211; конечный потребитель зачастую не программист, и ему необходимо всё разжевать и в рот положить&#8230;</p>
<h2>Совместимость</h2>
<p>К сожалению WordPress позиционирует себя как система с поддержкой PHP4, так что если Вы используете PHP5, то лучше заранее сообщить об этом пользователю на этапе включения плагина, либо создайте файл для обеспечения совместимости (если вы используете лишь какие-либо специфичные функции):</p>
<pre class="brush: php; title: ; notranslate">
// подключаем в файле плагина
if (version_compare(phpversion(), '5.1.0', '&lt;')) {
  require_once '%PluginName%_compatibility.php'
}

// что может быть в файле
if (!function_exists('array_diff_key')) {
    function array_diff_key()
    {
        $args = func_get_args();
        return array_flip(call_user_func_array('array_diff',
               array_map('array_flip',$args)));
    }
}
</pre>
<p>Дабы не изобретать велосипедов &#8211; советую посмотреть на пакет PEAR <a href="http://pear.php.net/package/PHP_Compat">PHP_Compact</a>.</p>
<p>Вполне вероятно Вам может так же понадобиться поддержка старых версий WordPress&#8217;a:</p>
<pre class="brush: php; title: ; notranslate">
// подключаем в файле плагина
if (version_compare(get_bloginfo('version'), '2.6.0', '&lt;')) {
  require_once '%PluginName%_compatibility.php'
}
</pre>
<h2>Выводы</h2>
<p>Подведу итого.</p>
<p>Директория плагина может выглядеть следующим образом:<br />
<code><br />
\plugin-name<br />
 |--\languages<br />
 |--\library<br />
 |--\javascript<br />
 |--\css<br />
 |-- plugin-name.php<br />
 |-- plugin-name_admin.php<br />
 |-- plugin-name_front.php<br />
 |-- plugin-name_settings.php<br />
 |-- plugin-name_compatibility.php<br />
 |-- readme.txt<br />
</code></p>
<ul>
<li>префикс %PluginName% не обязателен, и при большом количестве файлов даже избыточен</li>
<li>languages &#8211; все переводы будут лежать тут</li>
<li>library &#8211; директория для сторонних библиотек</li>
<li>javascript и css &#8211; содержат javascript и css файлы для вашего плагина</li>
<li>readme.txt &#8211; обязательно</li>
<li>функционал разнесен по нескольким файлам (admin.php, front.php, single.php и т.д.)</li>
<li>обеспечена совместимость версий (compatibility.php)</li>
</ul>
<p><strong>P.S.</strong> Если у Вас есть что добавить, либо есть ссылка на полезные ресурсы по теме &#8211; милости прошу в комментарии&#8230;</p>
<p>При подготовке материала были использованы следующие ресурсы:</p>
<ul>
<li><a href="http://codex.wordpress.org/Developer_Documentation">WordPress Developer Documentation</a></li>
<li><a href="http://weblogtoolscollection.com/archives/2008/01/14/suggestions-for-plugin-standards/">Suggestions For Plugin Standards</a></li>
<li><a href="http://www.smashingmagazine.com/2008/09/15/wordpress-developers-toolbox/">WordPress Developer’s Toolbox</a></li>
</ul>
<h3  class="related_post_title">Другие посты на эту тему</h3><ul class="related_post"><li><a href="http://anton.shevchuk.name/javascript/html-css-javascript-standarts/" title="Стандарты кодирования для (X)HTML, CSS и JavaScript&#8217;a">Стандарты кодирования для (X)HTML, CSS и JavaScript&#8217;a</a></li><li><a href="http://anton.shevchuk.name/php/php-coding-standards/" title="Стандарты кодирования для PHP">Стандарты кодирования для PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://anton.shevchuk.name/php/wordpress-plugins-standarts/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

