Миниатюры для поста в WP 2.9 на практике

Хочу немного рассказать читателям о новой функции 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.