Хочу немного рассказать читателям о новой функции wordpress 2.9, о создании превью для сообщений блогов и показать это на практике. Ранее было описано, как активировать функцию необходимую для панели управления, теперь остановимся более подробно на том, что нужно использовать в коде шаблона для вывода результатов ее работы.
Близится новый год, а вы не знаете что приготовить? Решить этот вопрос вам поможет кулинарный сайт кухарка.ком, на нем вы найдете большое количество рецептов и советов по организации новогоднего стола.
Img атрибуты для вывода превью
Предположим, нам хочется задать определенный размер изображения миниатюры, которая выводится в пост и специальный класс для него.
[php]
<?php the_post_thumbnail(array( 200,200 ), array( ‘class’ => ‘alignleft’ )); ?>
[/php]
Здесь на Ваш выбор: можете использовать несколько классов, а можете использовать другие атрибуты img тега, скажем, переопределить alt – который весьма полезен для поисковиков.
[php]
<?php the_post_thumbnail(‘medium’, array(‘class’ => ‘alignleft another_class’)); ?> // задаем дополнительный класс
<?php the_post_thumbnail(‘medium’, array(‘class’ => ‘alignleft’, ‘alt’ => ‘alttext’)); ?> // класс + атрибут alt
[/php]
Если нужно, можно использовать переопределение для заголовка title изображения превью. Если вы не примените нигде эти атрибуты, то по умолчанию автоматически будут выводиться значения из заданного в Media Library при загрузке изображения.
[php]
<?php the_post_thumbnail(‘medium’, array(‘class’ => ‘alignleft’, ‘alt’ => ‘alttext’, ‘title’ => ‘titletext’)); ?>
[/php]
Как применить Media Settings
Вы наверняка видели в настройках wordpress блога раздел под названием «Media Settings» или «Медиа файлы». Там указываются размеры миниатюрных изображений. Работает это так, насколько я смог в этом разобраться, если на блоге зарегистрировано какое-то количество пользователей, то каждый из них может менять эти настройки под себя. Прав я или нет, сложно сказать, но все ж е предлагаю научиться использовать эти значения при генерации миниатюр – бывает всякое, вдруг пригодится.
[php]
<?php
$width = get_option(‘thumbnail_size_w’) / 2; //получить указанную ширину превьюшки
$height = get_option(‘thumbnail_size_h’) /2; //получить указанную высоту превьюшки
the_post_thumbnail(array($width, $height), array(‘class’ => ‘alignleft’));
?>
[/php]
Там же, в «Медиа файлах» увидите еще два размера «большой» и «средний» и указание других величин высоты и ширины изображения. Для того чтобы их считать необходимо указать следующий код:
[php]
<?php get_option(‘medium_size_w’); //ширина «среднего» изображения ?>
<?php get_option(‘medium_size_h’); //высота «среднего» изображения ?>
<?php get_option(‘large_size_w’); //ширина «большого» изображения ?>
<?php get_option(‘large_size_h’); //ширина «большого» изображения ?>
<?php get_option(‘thumbnail_crop’); //проверка на вырезание части изображения, On=1, Off=0 ?>
[/php]
Совместимость с другими версиями WordPress
Практически каждый разработчик шаблона wordpress должен предусмотреть возможность его использования в различных версиях системы – поддерживающих плагины или виджеты. Для этого он добавляется непосредственно в код проверки для совместимости данного шаблона, в котором при недостачи какой-либо функции ничего не происходит или включается стандартная обработка.
В нашем случае появляется еще одна задача – предположим, версия wordpress и шаблон поддерживает вывод миниатюр, но ведь они не заданы во всех сообщениях блога. Здесь нам поможет следующий код:
[php]
if ( (function_exists(‘has_post_thumbnail’)) && (has_post_thumbnail()) ) {
the_post_thumbnail();
} else {
$postimage = get_post_meta($post->ID, ‘post-image’, true);
if ($postimage) {
echo ‘<img src=»’.$postimage.’» alt=»» />’;
}
}
[/php]
Он в первую очередь проверяет поддержки функции превью для сообщений и наличие миниатюры. Если все хорошо – изображение выводится, если нет, будет применен другой вариант. Здесь применяется метод произвольных полей custom fields – идет считывание со ссылки для поля post-image. Без сомнения, тут может быть использован любой другой метод, например, вполне подойдет с получением первого изображения поста.
Даже есть возможность получать первую картинку из библиотеки media library:
[php]
if ( function_exists(‘has_post_thumbnail’) && has_post_thumbnail() ) {
the_post_thumbnail(); // @param: array(height, width)
} else {
// via mediathek
$attachments = get_children( array(
‘post_parent’ => get_the_ID(),
‘post_type’ => ‘attachment’,
‘numberposts’ => 1, // show all -1
‘post_status’ => ‘inherit’,
‘post_mime_type’ => ‘image’,
‘order’ => ‘ASC’,
‘orderby’ => ‘menu_order ASC’
) );
foreach ( $attachments as $attachment_id => $attachment ) {
echo wp_get_attachment_image( $attachment_id );
}
}
[/php]
Если Вам интересен этот метод, вы можете более подробно о нем прочесть здесь.
Отображение миниатюр в RSS блога
На одном из блогов я нашел очень оригинальное решение. Мне кажется, что применяется они лишь в том случае, когда RSS поток идет первая часть сообщения, другими словами анонс, и без картинок, но при этом необходимо добавить миниатюру.
Автор блога поведал, что the_post_thumbnail – нововведение, одно из любимых, в WordPress 2.9, но совсем недавно он же с ужасом заметил, что заданное превью не включено в поток RSS блога. Именно для этого он и предложил добавить в файл functions.php следующий код:
[php]
function insertThumbnailRSS($content) {
global $post;
if ( has_post_thumbnail( $post->ID ) ){
$content = ‘<p>’ . get_the_post_thumbnail( $post->ID, ‘medium’ ) . ‘</p>’ . $content;
}
return $content;
}
add_filter(‘the_excerpt_rss’, ‘insertThumbnailRSS’);
add_filter(‘the_content_feed’, ‘insertThumbnailRSS’);
[/php]
Как видим, на практике оказалось все не так-то и просто с этим превью для сообщений в WordPress версия 2.9.