หยุด WordPress จากการเข้ารหัส hardc img คุณลักษณะความกว้างและความสูง


16

ฉันสงสัยว่ามีวิธีหยุด WordPress แบบง่าย ๆ บน hardcoding โดยอัตโนมัติคุณลักษณะของภาพความสูงและความกว้างของคุณลักษณะอื่น ๆ นอกเหนือจากการใช้ regex ...

ในขณะที่ฉันกำลังใช้กริดที่ยืดหยุ่นสำหรับโครงการของฉัน (ที่ไม่ใช่!) นี่ทำให้เกิดปัญหาเกี่ยวกับภาพที่ขี้ขลาด

คำตอบ:


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; ?> 

ใช้งานได้กับหน้าเวิร์ดเพรสที่มีการเข้ารหัสอย่างหนักเท่านั้นซึ่งไม่มีประโยชน์สำหรับ CMS
..

โปรดทราบ: วิธีการนี้ป้องกันภาพที่ไม่ตอบสนองตั้งแต่ WP 4.4 เนื่องจากไม่มีsrcsetคุณสมบัติ
Drivingralle

13

คุณสามารถลบแอตทริบิวต์กว้างและความสูงโดยการกรองการส่งออกของฟังก์ชั่นที่พบใน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 */
}

หวังว่านี่จะช่วยคุณได้

ไชโย


นี้จะเอาsrcset, sizesและแอตทริบิวต์ภาพอื่น ๆ ที่น่าเสียดายที่การตอบสนอง :( นี่คือการแก้ปัญหาในปัจจุบันของฉันที่สร้างคุณลักษณะกลับมา: gist.github.com/cibulka/8e2bf16b0f55779af590472ae1bf9239
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');
});

คำอธิบายใด ๆ เกี่ยวกับสาเหตุที่เป็นโซลูชันที่ดีที่สุด?
Kit Johnson

1
เพราะบางครั้ง "add_filter" ไม่ทำงานตามที่คุณต้องการเพราะเหตุใดฉันจึงพูดว่า
Asad Ali

0

โซลูชัน CSS:

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

สิ่งนี้จะช่วยให้รูปภาพที่ตอบสนองทำงานได้ตามที่ควรในขณะที่คุณรักษาคุณสมบัติความกว้างและความสูงในองค์ประกอบ img ซึ่งน่าจะดีกว่าสำหรับเบราว์เซอร์รุ่นเก่าประสิทธิภาพและ / หรือผ่านการตรวจสอบ HTML

โซลูชัน PHP:

สิ่งนี้จะป้องกันการเพิ่มแอตทริบิวต์ width / height ในสื่อที่เพิ่งเพิ่มเข้ามาใหม่ในเครื่องมือแก้ไข 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 );
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.