Полезные сниппеты для фотоблога – оформление и вывод изображений в посте

Полезные сниппеты для фотоблога - оформление и вывод изображений в посте | n-wp.ru
Сниппеты, помогающие оформить и вывести изображения в посте.
👍 Научим бесплатно правильно создавать сайты на WordPress. Подробнее →

Полезные сниппеты для фотоблога - оформление и вывод изображений в посте (1)

Работая над фотоблогом, я накопил множество полезных сниппетов, позволяющих упростить работу с изображениями и представить их в лучшем виде. Я решил все их собрать в одном месте. Начну со сниппетов, работающих с изображениями на странице поста.

Полезные сниппеты для фотоблога - оформление и вывод изображений в посте (4)

Facebook хоть и является мощной социальной сетью, но до сих пор его скрипты не отличаются полной совместимостью с WordPress. Часто при попытке отправить в Facebook ссылку на пост скрипт социальной кнопки не может определить миниатюру и описание. Нижеприведённый код формирует социальное описание страницы специально для Facebook. В качестве картинки извлекается миниатюра поста, а если таковой нет, то показывается изображение default_icon.jpg. В качестве заголовка используется название поста, а в качестве описания берется такая же цитата поста, какая отправляется и в RSS.

ID,'_thumbnail_id',false);
	$thumb = wp_get_attachment_image_src($thumb[0], false);
	$thumb = $thumb[0];
	$default_img = get_bloginfo('stylesheet_directory').'/images/default_icon.jpg';
 ?>
 

	
	<meta property="og:title" content="" />
	<meta property="og:description" content="" />
	<meta property="og:url" content=""/>
	<meta property="og:image" content="" />

	
         <meta property="og:title" content="" />
	<meta property="og:url" content=""/>
	<meta property="og:description" content="" />
         <meta property="og:image" content="" />

Этот код можно вставлять в любой шаблон, используемый как при выводе отдельноо поста, так и отдельной страницы, например, в header.php или в footer.php.

Полезные сниппеты для фотоблога - оформление и вывод изображений в посте (3)

Работа с произвольными полями может до бесконечности расширять возможности блога. Иногда требуется в определенное произвольное поле добавлять ссылку на миниатюру поста. Чтобы не делать это каждый раз вручную, можно автоматизировать этот процесс – определить миниатюру поста, и добавить ссылку на эту миниатюру в указанное произвольное поле.

function w_thumbnail_src() {
    if (has_post_thumbnail()) {
        $thumb = wp_get_attachment_image_src(get_post_thumbnail_id(), 'thumbnail');
        return $thumb[0]; // урл миниатюры
    } else {
        return '/images/default.jpg';  // или урл дефолтной картинки, если миниатюры нет
    }
}

add_action('publish_page', 'add_custom_field_automatically', 'w_thumbnail_src');
add_action('publish_post', 'add_custom_field_automatically');

function add_custom_field_automatically($post_id) {
global $wpdb;
if(!wp_is_post_revision($post_id)) {
    add_post_meta($post_id, 'Image', w_thumbnail_src(), true);
    }
}

Код вставляется в файл functions.php. Ссылка на миниатюру автоматически вставляется в произвольное поле Image. Если миниатюры нет, то можно вместо нее вставлять ссылку на стандартную картинку (например, логотип блога).

Полезные сниппеты для фотоблога - оформление и вывод изображений в посте (6)

Иногда требуется вывести все изображения (или несколько), присоединенных к посту, например, для создания слайдер изображений или нестандартной галереи. Сделаем это, причем дадим возможность устанавливать размер изображения и класс ссылки, ведущей на него. В файл functions.php добавляем код функции, выводящей все изображения, присоединенные к посту:

function display_images_in_list($size = thumbnail) {
    if($images = get_posts(array(
        'post_parent'    => get_the_ID(),
        'post_type'      => 'attachment',
        'numberposts'    => -1, // показать все, либо установите значение конкретное больше нуля
        'post_status'    => null,
        'post_mime_type' => 'image',
        'order'          => 'ASC',
    ))) {
        foreach($images as $image) {
            $attimg  = wp_get_attachment_image($image->ID,$size);
            $attlink = wp_get_attachment_url($image->ID);
            $title   = wp_get_attachment_url($image->title);
            static $count = 0;
            $count += 1;
            echo ''.$attimg.'';
        }
    }
}

В файл single.php вставляем вызов функции:

</pre>
<p>Аргументом у функции служит размер изображения:</p>
<ul>
<li>full – изображение выводится в полную величину</li>
<li>thumbnail, medium, large, пользовательское название размера миниатюры – изображение выводится в виде миниатюры соответствующего размера</li>
</ul>
<p>В коде функции можно задать класс ссылке на изображение.</p>
<p><a href="https://n-wp.ru/wp-content/uploads/2013/07/tiaurus-20130729201238.jpg" rel="attachment wp-att-21591"><img src="https://n-wp.ru/wp-content/uploads/2013/07/tiaurus-20130729201238.jpg" alt="Полезные сниппеты для фотоблога - оформление и вывод изображений в посте (2)" title="Полезные сниппеты для фотоблога - оформление и вывод изображений в посте (2)" width="1123" height="382" class="alignnone size-full wp-image-21591" /></a></p>
<p>При выводе галереи изображений, присоединенных к посту, шорткодом gallery, в эту галерею попадает и изображение, являющееся миниатюрой поста. Однако если миниатюра поста уже выводится в начале записи, то смысла выводить ее еще раз нет. Поэтому не лишним будет способ исключения миниатюры поста из галереи. Вставляем в файл <em>functions.php</em>:</p>
<pre>
function exclude_thumbnail_from_gallery($null, $attr) 
{ 
    if (!$thumbnail_ID = get_post_thumbnail_id()) 
        return $null;
 
    remove_filter('post_gallery', 'exclude_thumbnail_from_gallery'); 
 
    if (!isset($attr['exclude']) || empty($attr['exclude'])) 
        $attr['exclude'] = array($thumbnail_ID); 
    elseif (is_array($attr['exclude'])) 
        $attr['exclude'][] = $thumbnail_ID; 
  
    $gallery = gallery_shortcode($attr); 
  
    add_filter('post_gallery', 'exclude_thumbnail_from_gallery', 10, 2); 
 
    return $gallery; 
} 
add_filter('post_gallery', 'exclude_thumbnail_from_gallery', 10, 2);

Теперь миниатюра поста всегда будет исключаться из галереи.

Есть способ и более простой, он подходит тем, кто автоматически выводит галерею изображений, встроив функцию вывода в файл single.php. В этом случае чтобы исключить миниатюру из галереи, в файле single.php нужно использовать:

ID ) . '"]'); ?>

При выводе изображений в виде стандартной галереи WordPress автоматически добавляет к изображениям атрибуты title и alt. Версия WordPress 3.5+ не добавляет к изображениям атрибут title, считая его почему-то несущественным, но тем не менее есть атрибут alt, то он будет присоединен к изображению. Иногда бывают ситуации, когда эти атрибуты нужно удалить и у изображений, выведенных с помощью стандартного шорткода gallery. Чтобы это сделать, добавьте в файл functions.php:

function tp_gallery_filter( $attr ) { 
    $attr['alt'] = ""; 
    $attr['title'] = ""; 
    return $attr; 
} 
add_filter( 'wp_get_attachment_image_attributes', 'tp_gallery_filter' );

Основное содержимое поста выводится с помощью функции the_content. Можно удалить у всех изображений, используемых в посте, и выводимых в основном содержимом, атрибут title. Для этого нужно вставить в файл functions.php:

function remove_img_titles($text) {
    $result = array();
    preg_match_all('|title="[^"]*"|U', $text, $result);
    foreach($result[0] as $img_tag) {
        $text = str_replace($img_tag, '', $text);
    }
    return $text;
}
add_filter('the_content', 'remove_img_titles');

Чтобы глобально удалить атрибут title вообще у всех изображений в блоге, неважно, где они выводятся и с помощью каких функций, можно использовать jQuery-скрипт. Он находит в исходном коде страницы код вывода изображения, и удаляет из него атрибут title. Вставьте код в файл footer.php:

[code lang=”js”] jQuery(document).ready(function($) {
$(‘img’).each(function() { $(this).removeAttr(‘title’); });
});

Полезные сниппеты для фотоблога - оформление и вывод изображений в посте (5)

Раньше при загрузке изображений в блог WordPress предлагает добавить к каждому изображению мета-данные title, alt и caption. Однако в версии WordPress 3.5 изменилось медиатека и скрипты добавления изображений, и теперь заполнять мета-данные закачиваемых в блог изображений стало не удобно: приходится совершать множество манипуляций, поле title стало недоступным, а мета-данные alt вообще непонятно как заполняются. Поэтому все плагины, которые умели массово автоматически заполнять alt и title, перестали работать. Я отказался от дополнительных плагинов, и теперь заполняю в фотоблоге мета-данные title и caption автоматически – данные для них берутся из названия поста, к которому присоединяются изображения. Нужно вставить следующий код в файл functions.php:

function modify_uploaded_file_meta($meta, $file, $sourceImageType) {
    if( isset($_REQUEST['post_id']) ) {
        $post_id = $_REQUEST['post_id'];
    } else {
        $post_id = false;
    }
    if($post_id && is_numeric($post_id)) {
        $post_title = get_the_title($post_id);
        if($post_title) {
            $meta['title'] = $post_title;
            $meta['caption'] = $post_title;
        }

    }
    return $meta;
}
add_filter('wp_read_image_metadata', 'modify_uploaded_file_meta', 1, 3);

При закачке изображения в блог функция определяет название текущего поста, и автоматически заполняет поля Заголовок (title) и Описание (caption), вставляя туда название поста.

Следующим шагом будет знакомство со сниппетами для отдельной страницы вложения, на которой отображается присоединенное к посту изображение.

Создай свой первый сайт на WordPress

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий