Сегодня написал свой первый плагин для WordPress . До этого на PHP не писал около года, так что строго не судите.
Плагин очень простой. Он представляет собой виджет, выводящий архив блога по месяцам в две колонки . Причиной для его написания стал тот факт, что мне не удалось сделать желаемое средствами WordPress, ровно как и с помощью CSS. Найти готовый плагин также не получилось. К тому же, всегда было интересно попробовать написать свой плагин. Сейчас виджет уже успешно используется на одном из моих «серых» блогов . А вот как он выглядит:
Я считаю, что такой способ отображения архива лучше традиционного, поскольку позволяет более рационально использовать место на веб-странице. Посмотрите несколько блогов и увидите сами, как много места пропадает впустую при выводе списка рубрик и архива в одну колонку.
Я назвал плагин «Two Columns Archive», скачать его можно здесь здесь . Устанавливается он очень просто — скачиваем, распаковываем в каталог с плагинами, активируем, добавляем сайдбар. В настройках можно указать заголовок виджета. Отображать число записей рядом с ссылкой на архив плагин не умеет , так как мне это функционал был без надобности и я не уверен, что кому-то он действительно нужен.
Далее я хотел бы прокомментировать исходный код плагина. В нем всего лишь ~80 строк, так что это не займет много места.
/*
Plugin Name: Two Columns Archive
Version: 1.0
Plugin URI: http://remontka.com/two-columns-archive-plugin/
Description: Description — http://remontka.com/two-columns-archive-plugin/
Author: Alexandr Alexeev
Author URI: http://remontka.com/
*/
Здесь все просто — указываем в комментариях имя и версию плагина, описание, домашнюю страницу плагина, имя автора и url его сайта. WordPress отображает эту информацию в админке. Достаточно указать только Plugin Name.
global $wpdb , $wp_locale ;
extract ( $args ) ;
$query = »
select
max(post_date) as max_date,
min(post_date) as min_date
from » . $wpdb -> posts . »
where post_type = ‘post’
and post_status = ‘publish’
» ;
Функция, отвечающая непосредственно за вывод виджета. Запрос определяет дату публикации первого и последнего поста. Неопубликованные посты не в счет.
$row = $res [ 0 ] ;
preg_match ( ‘/^([0-9]{4})-([0-9]{2})/’ , $row [ ‘max_date’ ] , $m ) ;
$year = $max_year = $m [ 1 ] ; $month = $max_month = $m [ 2 ] ;
preg_match ( ‘/^([0-9]{4})-([0-9]{2})/’ , $row [ ‘min_date’ ] , $m ) ;
$min_year = $m [ 1 ] ; $min_month = $m [ 2 ] ;
$delta = $max_year * 12 + $max_month — $min_year * 12 — $min_month + 1 ;
Выполняем запрос, с помощью регулярных выражений определяем год и месяц публикации первого и последнего поста.
echo htmlspecialchars ( get_option ( ‘two_columns_archive_title’ ) ) ;
echo $after_title ;
Выводим заголовок виджета. Переменные $before_widget, $before_title и $after_title были инициализированные в строке 13 функцией extract. Их значения были переданы в функцию то ли в объекте, то ли в ассоциативном массиве $args. Напрямую с этим аргументом лучше не работать, потому что не известно, как изменится API движка в будущем.
$left_steps = ceil ( $delta / 2 ) ;
for ( $i = 1 ; $i <= $delta ; $i ++ ) {
// $month = sprintf(«%02d», $month);
$month_name = $wp_locale -> get_month ( $month ) ;
$html = «<li><a href= » «» . get_month_link ( $year $month ) .
«» «» > $month_name $year </a></li> n «» ;
if ( $i <= $left_steps ) $left .= $html ;
else $right .= $html ;
if ( !— $month ) {
$month = 12 ; $year —;
}
}
Определяем html-код левой ($left) и правой ($right) колонок. Функция get_month_link возвращает пермалинк на страницу архива. Метод get_month объекта $wp_locale (класс WP_Locale) преобразует номер месяца в его название в соответствии с локалью движка.
<div style=»»float: left;»»>
<ul> <?php echo $left ; ?> </ul>
</div>
<div style=»»float: right; width: 50%;»»>
<ul> <?php echo $right ; ?> </ul>
</div>
<div class=»»clear»»></div>
<?
echo $after_widget ;
}
Выводим код сайдбара. Переменная $after_widget взялась оттуда жеоткуда и $before_widget$before_title