从硬编码img宽度和高度属性中停止wordpress


16

我想知道是否有一种简单的方法可以使WordPress自动停止对具有特征的图像高度和宽度属性进行硬编码,而不是使用正则表达式...

当我在项目中使用灵活的网格(不是)时,这会引起一些时髦的图像问题。

Answers:


7

您可以获取特色图片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; ?> 

仅适用于硬编码的wordpress页面,这对CMS无效。
秒。

注意事项:自WP 4.4起,此方法将阻止响应图像,因为它不包含该srcset属性。
Drivingralle '02

13

您可以通过过滤位于处的image_downsize函数的输出来删除width和height属性wp-includes/media.php。为此,您可以编写自己的函数并通过主题的functions.php文件或作为插件执行它。

例:

删除widthheight属性。

/**
 * 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 */
}

希望这对您有所帮助。

干杯,


不幸的是srcset,这会删除sizes和其他响应式图像属性。:(这是我目前的解决方案,它将属性重新构建
Petr Cibulka

10

您可以使用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文件中


仍然像魅力。
拉胡尔

2

您可以使用否决内联样式/属性!important

.wp-post-image {
    width: auto !important; /* or probably 100% in case of a grid */
    height: auto !important; 
}

这不是最干净的解决方案,但可以解决您的问题。


由于某种原因,该班级wp-post-image未包含在我的图像中。相反,我有类似的东西wp-image-26。我不得不使用另一个选择器,但是这个想法奏效了。
码头

2

最好的解决方案是将jquery放在页脚中

jQuery(document).ready(function ($) {
    jQuery('img').removeAttr('width').removeAttr('height');
});

为什么这是“最佳”解决方案的任何解释?
杰森·约翰逊

1
因为有时候“ add_filter”在您想要的地方不起作用,这就是我说的原因
Asad Ali

0

CSS解决方案:

img[class*="align"], img[class*="wp-image-"] {
    width: auto;
    height: auto;
}

这允许响应式图像按其应有的方式工作,同时您可以在img元素中保留width和height属性,这对于较旧的浏览器,性能和/或传递HTML验证程序可能更好。

PHP解决方案:

这将防止在WP编辑器中的任何新添加的媒体上(通过“添加媒体”)添加width / height属性。仅供参考,它也可能会影响您的图像字幕!

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 );
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.