Остановите wordpress от жесткого кодирования атрибутов ширины и высоты img
Мне интересно, есть ли простой способ запретить WordPress автоматически жестко кодировать атрибуты высоты и ширины изображения, кроме использования регулярных выражений...
Поскольку я использую гибкую сетку для своего проекта (а кто нет!), Это вызывает некоторые проблемы с изображением.
7 answers
Вы можете получить URL-адрес изображения и добавить его в свой контент вручную, например:
<?php
$image = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), 'thumbnail' );
if ($image) : ?>
<img src="<?php echo $image[0]; ?>" alt="" />
<?php endif; ?>
Вы можете удалить атрибуты ширины и высоты, отфильтровав выходные данные функции image_downsize
, найденной в wp-includes/media.php
. Для этого вы пишете свою собственную функцию и выполняете ее с помощью своей темы functions.php файл или в виде плагина.
Пример:
Удалите атрибуты width
и height
.
/**
* This is a modification of image_downsize() function in wp-includes/media.php
* we will remove all the width and height references, therefore the img tag
* will not add width and height attributes to the image sent to the editor.
*
* @param bool false No height and width references.
* @param int $id Attachment ID for image.
* @param array|string $size Optional, default is 'medium'. Size of image, either array or string.
* @return bool|array False on failure, array on success.
*/
function myprefix_image_downsize( $value = false, $id, $size ) {
if ( !wp_attachment_is_image($id) )
return false;
$img_url = wp_get_attachment_url($id);
$is_intermediate = false;
$img_url_basename = wp_basename($img_url);
// try for a new style intermediate size
if ( $intermediate = image_get_intermediate_size($id, $size) ) {
$img_url = str_replace($img_url_basename, $intermediate['file'], $img_url);
$is_intermediate = true;
}
elseif ( $size == 'thumbnail' ) {
// Fall back to the old thumbnail
if ( ($thumb_file = wp_get_attachment_thumb_file($id)) && $info = getimagesize($thumb_file) ) {
$img_url = str_replace($img_url_basename, wp_basename($thumb_file), $img_url);
$is_intermediate = true;
}
}
// We have the actual image size, but might need to further constrain it if content_width is narrower
if ( $img_url) {
return array( $img_url, 0, 0, $is_intermediate );
}
return false;
}
Прикрепите новую функцию к крючку image_downsize
:
/* Remove the height and width refernces from the image_downsize function.
* We have added a new param, so the priority is 1, as always, and the new
* params are 3.
*/
add_filter( 'image_downsize', 'myprefix_image_downsize', 1, 3 );
Также не забудьте правильно масштабировать изображения в вашем CSS:
/* Image sizes and alignments */
.entry-content img,
.comment-content img,
.widget img {
max-width: 97.5%; /* Fluid images for posts, comments, and widgets */
}
img[class*="align"],
img[class*="wp-image-"] {
height: auto; /* Make sure images with WordPress-added height and width attributes are scaled correctly */
}
img.size-full {
max-width: 97.5%;
width: auto; /* Prevent stretching of full-size images with height and width attributes in IE8 */
}
Надеюсь, это поможет ты.
Приветствия,
Вы можете использовать фильтр post_thumbnail_html
для удаления атрибута:
function remove_img_attr ($html) {
return preg_replace('/(width|height)="\d+"\s/', "", $html);
}
add_filter( 'post_thumbnail_html', 'remove_img_attr' );
Поместите это в свой functions.php
файл
Вы можете отменить встроенные стили/атрибуты с помощью !important
:
.wp-post-image {
width: auto !important; /* or probably 100% in case of a grid */
height: auto !important;
}
Это не самое чистое решение, но оно решает вашу проблему.
Лучшее решение - разместить jquery в нижнем колонтитуле
jQuery(document).ready(function ($) {
jQuery('img').removeAttr('width').removeAttr('height');
});
Решение CSS:
img[class*="align"], img[class*="wp-image-"] {
width: auto;
height: auto;
}
Это позволяет адаптивным изображениям работать должным образом, в то же время вы сохраняете атрибуты ширины и высоты в элементе img, что, вероятно, лучше для старых браузеров, производительности и/или для передачи средств проверки HTML.
Решение на PHP:
Это предотвратит добавление атрибутов ширины/высоты на любые недавно добавленные носители в редакторе WP (через "Добавить носитель"). К вашему сведению, это также может повлиять на ваши подписи к изображениям!
function remove_widthHeight_attribute( $html ) {
$html = preg_replace( '/(width|height)="\d*"\s/', "", $html );
return $html;
}
add_filter( 'post_thumbnail_html', 'remove_widthHeight_attribute', 10 );
add_filter( 'image_send_to_editor', 'remove_widthHeight_attribute', 10 );
Вот простое решение Javascript:
<script type="text/javascript">
jQuery.noConflict();
jQuery(document).ready(function($){
$('img').each(function(){
$(this).removeAttr('width')
$(this).removeAttr('height');
});
});
</script>
Это можно использовать для таргетинга на определенные изображения вместо всех изображений с помощью селектора CSS, например:
$('.myspecificclass img').each(function()