The_post_thumbnail không có srcset?


12

WordPress 4.4 bổ sung nhiều kích cỡ hình ảnh srcsetkhi sử dụng the_post_thumbnailchức năng. Có thể chỉ có một kích thước hình ảnh mà không có srcset?

Tôi hiểu rằng có thể thêm bộ lọc để tắt srcsettừ tất cả các hình ảnh, nhưng tôi muốn chỉ tắt srcsetkhi gọi một kích thước hình thu nhỏ cụ thể (ví dụ: chỉ khi gọi kích thước hình ảnh đầy đủ).

Câu trả lời:


13

Tôi chỉ muốn tắt srcset khi gọi kích thước hình thu nhỏ cụ thể (ví dụ: chỉ khi gọi kích thước hình ảnh đầy đủ).

Đây là hai ý tưởng (nếu tôi hiểu bạn chính xác):

Cách tiếp cận số 1

Hãy kiểm tra kích thước từ post_thumbnail_sizebộ lọc. Nếu nó phù hợp với kích thước tương ứng (ví dụ full) thì chúng tôi đảm bảo $image_metatrống, với wp_calculate_image_srcset_metabộ lọc. Bằng cách đó, chúng tôi có thể bảo lãnh sớm từ wp_calculate_image_srcset()chức năng (sớm hơn so với sử dụng max_srcset_image_widthhoặc wp_calculate_image_srcsetbộ lọc để vô hiệu hóa nó):

/**
 * Remove the srcset attribute from post thumbnails 
 * that are called with the 'full' size string: the_post_thumbnail( 'full' )
 *
 * @link http://wordpress.stackexchange.com/a/214071/26350
 */
 add_filter( 'post_thumbnail_size', function( $size )
 {
     if( is_string( $size ) && 'full' === $size )
         add_filter( 
             'wp_calculate_image_srcset_meta',  
              '__return_null_and_remove_current_filter' 
         );   
    return $size;
 } );

// Would be handy, in this example, to have this as a core function ;-)
function __return_null_and_remove_current_filter ( $var )
{
    remove_filter( current_filter(), __FUNCTION__ );
    return null;
}

Nếu chúng ta có:

the_post_thumbnail( 'full' );

sau đó <img>thẻ được tạo sẽ không chứa srcsetthuộc tính.

Đối với trường hợp:

the_post_thumbnail();

chúng ta có thể khớp 'post-thumbnail'chuỗi kích thước.

Cách tiếp cận số 2

Chúng tôi cũng có thể thêm / xóa bộ lọc theo cách thủ công với:

// Add a filter to remove srcset attribute from generated <img> tag
add_filter( 'wp_calculate_image_srcset_meta', '__return_null' );

// Display post thumbnail
the_post_thumbnail();

// Remove that filter again
remove_filter( 'wp_calculate_image_srcset_meta', '__return_null' );

có lẽ bạn cũng cần phải xóa wp_calculate_image_srcset_metabộ lọc khi chức năng kết thúc
Đánh dấu Kaplun

Tôi đã thêm cách tiếp cận trong đó chúng tôi thêm / xóa cuộc gọi lại bộ lọc theo cách thủ công. Tôi sử dụng ví dụ đếm theo cách tiếp cận khác để chạy nó chỉ một lần cho mỗi the_post_thumbnail () gọi @MarkKaplun
birgire

Tôi đã đơn giản hóa đoạn mã, cảm ơn vì đã để tôi suy nghĩ lại về điều này ;-) @MarkKaplun
birgire

1
:) Tôi vừa tìm thấy một cách hiệu quả để thể hiện sự không thích của mình đối với các chức năng ẩn danh trong các bộ lọc :)
Đánh dấu Kaplun

1
hoặc có phải là một "chạy một thời gian" tham số để add_filter. Mô hình này là thực sự phổ biến.
Đánh dấu Kaplun
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.