Wp get attachment image src


 function wm_logo()   {   //Helper variables   $output = '';   $blog_info = apply_filters('wmhook_wm_logo_blog_info', array('name' => trim(get_bloginfo('name')), 'description' => trim(get_bloginfo('description'))));   $args = apply_filters('wmhook_wm_logo_args', array('title_att' => $blog_info['description'] ? $blog_info['name'] . ' | ' . $blog_info['description'] : $blog_info['name'], 'logo_image' => function_exists('jetpack_get_site_logo') ? absint(jetpack_get_site_logo('id')) : false, 'logo_type' => 'text', 'url' => home_url('/')));   //Preparing output   //Logo image   if (!empty($args['logo_image'])) {   $img_id = is_numeric($args['logo_image']) ? absint($args[&#.  

;class' => '')); $args['logo_image'] = wp_get_attachment_image($img_id, 'full', false, $atts); } $args['logo_type'] = 'img'; } $args['logo_image'] = apply_filters('wmhook_wm_logo_logo_image', $args['logo_image']); //Logo HTML $output .= '<div class="site-branding">'; $output .= '<h1 class="' . apply_filters('wmhook_wm_logo_class', 'site-title logo type-' . $args['logo_type'], $args) . '">'; $output .= '<a href="' . esc_url($args['url']) . '" title="' . esc_attr($args['title_att']) . '">'; if ('text' === $args['logo_type']) { $output .= '<span class="text-logo">' . $blog_info['name'] . '</span>'; } else { $output .= $args['logo_image']; } $output .= '</a></h1>'; if ($blog_info['description']) { $output .= '<h2 class="site-description">' . $blog_info['description'] . '</h2>'; } $output .= '</div>'; //Output echo apply_filters('wmhook_wm_logo_output', $output); }

hotexamples.com

Что означает 'two' ? Это настраиваемый размер изображения?

Поместите следующий var_dump('<pre>',$image,'</pre>'); после указанной объявленной переменной $image ,

 $image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'two' ); var_dump('<pre>',$image,'</pre>');  

и предоставить результаты, чтобы мы могли проверить выход.

Согласно Кодексу второй аргумент в этой функции,

wp_get_attachment_image_src ($ attachment_id, $ size, $ icon);

… относится к указанному размеру, который вы хотите вернуть.

$size (string/array) (optional) Размер изображения, отображаемого дл.


), либо массив из 2 элементов, представляющий ширину и высоту в пикселях, например массив (32 , 32). Начиная с версии 2.5, этот параметр не влияет на размер значков мультимедиа, которые всегда отображаются в исходном размере.

  Default: thumbnail  

Там 'two' должно ссылаться на имя размера настраиваемого изображения, которое вы добавили,

 add_image_size( $name, $width, $height, $crop ); 

http://codex.wordpress.org/Function_Reference/add_image_size

Вы это сделали?

Если да , было ли это изображение до создания пользовательского размера изображения или после создания настраиваемого размера изображения?


Если изображение существовало до того, как вы создали пользовательский размер изображения, то это изображение, о котором вы пытаетесь получить, не имеет приложенного размера изображения в качестве сгенерированной версии его оригинала.


x412;ам нужно будет восстановить миниатюры, чтобы применить это дело.

www.wordpressask.com

Сразу к делу

В wordpress есть встроенная функция получения url проложенной картинки по ее id.

  $url = wp_get_attachment_image_src($id_img, 'thumbnail');  echo $url[0];  

Код вернет массив из 3х элементов: url изображения, ширина, высота.

Если необходимо получить url файла произвоьного формата, то нобходимо использовать иной код

  $url = get_attachment_link( $attachment_id );  echo $url;  

А вот этот код отдаст только url без других параметров


Это может быть не только картинка. К сожалению я не нашел обратного тега, т.е. нет встроенной функции получения id картинки по ее url, может плохо искал? Поскольку все приложенные файлы являются объектами основной таблицы posts, то можно создать свой тег, добавив следующий код в файл functons.php в папке активной темы:

  function get_attachment_id_by_url( $url ) {  	global $wpdb;      	// таблица постов, там же перечисленны и медиафайлы  	$table = $wpdb->prefix . 'posts';  	$attachment_id = $wpdb->get_var(   		$wpdb->prepare( "SELECT ID FROM $table WHERE guid RLIKE %s", $url )   	);  	// Returns id  	return $attachment_id;  }  

Вот такой незамысловатый код. Функция get_var вернет одну ячейку таблицы, для нас необходимо получить ячейку guid, внутри этой функции используется экранирующая функция prepare, которая должна защитить от sql-инъекции в базу данный. На выходе получаем id из базы. 

Функцию можно использовать вот так: 

  echo function get_attachment_id_by_url( $url_img ); // выведет id изображения  

А зачем это надо?

Лично я использовал чтобы создать галерею. Я знаю, что в wordpress уже есть встроенная галерея, но мне почему-то не захотелось ее стилизовать и я пошел по пути, которое счел простым: в стандартный редактор WYSIWYG пользователь кидает изображения, а я уже выдергиваю из текста картинки и вывожу сверстанную галерею, содержащую пользовательские изображения.


модератор сайта может загрузить и 5000х5000 пикселей, поэтому лучше использовать те картинки, которые движок сожмет, вы же в курсе, что wordpress создает несколько копий исходного изображения разного формата: для миниатюры, среднего и крупного изображения. Размер этих изображений можно задать в настройках блога — параметры->медиафайлы.

А дальше дело техники. Используя код в начале этого поста, берем картинку подходящего размера и выводим конечному пользователю сайта

sawtech.ru

Первый способ

Для получения и вывода всех изображений, прикрепленных посту, можно воспользоваться функцией get_posts(). В аргументах функции надо задать: post_parent — id поста, картинки которого мы хотим получить, post_type’ => ‘attachment’, ‘post_mime_type’ => ‘image’, остальное — по вкусу.

$args = array(  		'order' => 'ASC',  		'post_type' => 'attachment',  		'post_parent' => '26',  		'post_mime_type' => 'image',  		'post_status' => null,  		'numberposts' => -1  	);  $attachments = get_posts($args);  if ($attachments) {  	foreach ($attachments as $attachment) {  	$img_url = wp_get_attachment_image_url($attachment->ID, full);  	}  }  wp_reset_postdata();  

Не забываем ставить wp_reset_postdata()!

Картинки можно вывести, например, в виде галереи prettyPhoto:

<ul class="gallery">  	<li>>a title="Фото" href="<?php echo $img_url; ?>" rel="prettyPhoto[gallery1]"><img src="<?php echo $img_url; ?>" alt="Фото" /></a></li>  </ul>  

Второй способ


Можно использовать функцию get_page_children() — она получает все дочерние элементы, в том числе и рисунки.

$my_wp_query = new WP_Query();  $img_pages = $my_wp_query->query(array('post_type' => 'attachment','post_mime_type' => 'image'));  $img_children=get_page_children( $post->ID, $img_pages );  

Это вставляется внутрь основного цикла. $post->ID — это id текущего поста в цикле. Если нужны картинки конкретного поста, ставим сюда конкретный ID.

Третий способ

Самый короткий и простой способ — получить изображения с помощью get_attached_media():

$imgs = get_attached_media( 'image', $post->ID  );  foreach($imgs as $img){  $image_url = $img->guid;  echo '<img src="'. $image_url .'" />';  }  

Когда это не работает

Если при вставке картинок в пост они не загружались с компьютера, а брались из медиа-библиотеки, все три способа, приведенные выше не сработают, если картинки были уже прикреплены ранее к какому-то другому посту. Но выход есть: нужно получить текст поста в переменную и с помощью регулярного выражения вытащить из него src картинок. Далее можно сверстать страницу по своему вкусу.

<?php $str= get_the_content();  preg_match_all('/src="([^"]+)"/i', $str, $matches);  $img_urls = $matches[1]; ?>  <?php if($img_urls) { ?>  <ul class="gallery">  <? foreach ($img_urls as $img_url) {?>  <li><a href="<?php echo $img_url; ?>" rel="prettyPhoto[cat-<?php echo $post->ID; ?>]" title="<?php the_title(); ?>"><img src="<?php echo $img_url; ?>" alt="" /></a></li>  <?php }} ?>  </ul>  

Иконка поста

Вывести иконку поста можно, например, так:

$image_url = wp_get_attachment_image_src( get_post_thumbnail_id(), 'medium');  echo '<div class="post_thumbnail"><img src="'.$image_url[0].'" alt="" /></div>';  

ls-web.ru

Параметры функции wp_get_attachment_image_src

wp_get_attachment_image_src( $attachment_id, $size, $icon )

Параметр Тип данных Описание
$attachment_id число идентификатор (Ид) изображения
$size строка / массив

размер картинки, который нам нужен. Можно указывать зарезервированные строки:

  • thumbnail
  • medium
  • large
  • full

или же указать данные в виде числового массива, например array(200,200)

$icon true / false Если получаем вложение, отличное от изображения можно выводить иконку файла. Для этого нужно установить значение true. По умолчанию false.

 

Функция wp_get_attachment_image_src возвращает

В результате своей работы, функция wp_get_attachment_image_src возвращает массив из 3 эллементов:

Как использовать wp_get_attachment_image_src

Работать с функцией довольно просто, достаточно сделать правильный запрос. Например, выведем медиафайл с идентификатором 10:

Если вам нужно в посте получить идентификатор миниатюры и вывести прямую ссылку, вы можете сделать это приблизительно вот так:

Функция has_post_thumbnail проверяет наличие миниатюры. Если она есть мы получаем идентификатор миниатюры функцией get_post_thumbnail_id и выводим ссылку на миниатюру в любом месте нашего шаблона.

Более подробное использование этой функции можно посмотреть в посте: миниатюра wordpress.

help-wp.ru

Demo Fiddle

HTML

<header></header> <section>Content</section> 

CSS

html, body {  height:100%;  width:100%;  margin:0; } header {   background:url(https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTQOrSSvhefLVAXo3OOoMGYGS232bfHFnZyA9Jk24KeefYuau8c);  background-size:cover;  background-position:center center; } header, section {  height:100%; } section {  background:lightgrey } 

bighow.org

WordPress не хранит путь сгенерированных размеров в любом месте, вам нужно build it.

Как предложено @kraftner в комментариях, wp_get_attachment_metadata() может использоваться для получения некоторых частей, необходимых для построения пути. Альтернативой является image_get_intermediate_size().

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

Так что только Возможность сделать предположение, что масштабированное изображение находится в той же папке с исходным изображением.

Это предположение может показаться хаком, и, вероятно, есть, но она используется в самом WordPress ядре функций как image_downsize(), что делает именно строковой замены (см линии #184 of media.php), так что если вы ищете чиновника путь .. это тот.

Наведение совмещены:

function scaled_image_path( $attachment_id,$ size = 'thumbnail') {   $file = get_attached_file($ attachment_id, true);   if (empty( $size) ||$ size === 'full') {   // for the original size get_attached_file is fine   return realpath( $file);   }  if (! wp_attachment_is_image($ attachment_id)) {   return false; // the id is not referring to a media   }   $info = image_get_intermediate_size($ attachment_id, $size);   if (!is_array($ info) || ! isset( $info['file'])){   return false; // probably a bad size argument   }   return realpath(str_replace(wp_basename($ file), $info['file'],$ file));  }  

Функция выше принимает идентификатор вложения и размер и возвращает путь.

Я применил realpath, прежде чем возвращать пути, потому что эта функция возвращает false для несуществующих файлов, поэтому вся функция всегда возвращает false, если что-то пошло не так.

Единственная альтернатива этому потоку — это сохранить путь масштабируемого изображения (-ов) где-нибудь, возможно, отправить мета и извлечь, когда это необходимо, но это может работать только для файлов, загруженных после активации вашего плагина.

wordpress.stackovernet.com

I’m trying to add an attribute to the result of wp_get_attachment_image.

I want to use jquery lazyload to handle loading of my post thumbnails and to do that I need to add a data-original= attribute to the <img> tag wp_get_attachment_image is creating.

I’ve tried:

$imgsrc = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), "full" ); $imgsrc = $imgsrc[0]; $placeholderimg = wp_get_attachment_image( 2897, "full", array('data-original'=>$imgsrc) ); 

But it doesn’t add the data attribute as I expected.

<img class="attachment-full" width="759" height="278" alt="..." src="..."></img> 

Looking at the wp_get_attachment_image function it would seem that this ought to work though:

function wp_get_attachment_image($attachment_id, $size = 'thumbnail', $icon = false, $attr = '') {    $html = '';   $image = wp_get_attachment_image_src($attachment_id, $size, $icon);   if ( $image ) {   list($src, $width, $height) = $image;   $hwstring = image_hwstring($width, $height);   if ( is_array($size) )   $size = join('x', $size);   $attachment =& get_post($attachment_id);   $default_attr = array(   'src' => $src,   'class' => "attachment-$size",   'alt' => trim(strip_tags( get_post_meta($attachment_id, '_wp_attachment_image_alt', true) )), // Use Alt field first   'title' => trim(strip_tags( $attachment->post_title )),   );   if ( empty($default_attr['alt']) )   $default_attr['alt'] = trim(strip_tags( $attachment->post_excerpt )); // If not, Use the Caption   if ( empty($default_attr['alt']) )   $default_attr['alt'] = trim(strip_tags( $attachment->post_title )); // Finally, use the title     $attr = wp_parse_args($attr, $default_attr);   $attr = apply_filters( 'wp_get_attachment_image_attributes', $attr, $attachment );   $attr = array_map( 'esc_attr', $attr );   $html = rtrim("<img $hwstring");   foreach ( $attr as $name => $value ) {   $html .= " $name=" . '"' . $value . '"';   }   $html .= ' />';   }     return $html;  } 

Where am I going wrong?

Tags: image

exceptionshub.com


You May Also Like

About the Author: admind

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.