Xóa thứ nguyên khỏi wp_get_attachment_image


10

Tôi gặp một số vấn đề khi xóa chiều rộng và chiều cao khỏi hình ảnh đính kèm của mình khi sử dụng wp_get_attachment_image. Đây là những gì tôi đang sử dụng để hiển thị hình ảnh

 <?php echo $image = wp_get_attachment_image( $entry['slide_image_id'], true, 'full'); ?>

Giao diện mã nguồn trông như thế nào

 <img width="150" height="108" src="http://website:8888/wp-content/uploads/2015/12/cupcakes-and-cosmetics-logo.png" class="attachment-1 size-1" alt="cupcakes-and-cosmetics-logo" />

Tôi muốn nó hiển thị như thế này

 <img src="http://website:8888/wp-content/uploads/2015/12/cupcakes-and-cosmetics-logo.png" class="attachment-1 size-1" alt="cupcakes-and-cosmetics-logo" />

Hình ảnh đang được kéo từ một trường tệp lặp lại với một mục có id là slide_image_id. Tôi đã tìm kiếm xung quanh và có thông báo sử dụng wp_get_attachment_image_url nhưng khi tôi sử dụng nó với mã ở trên thì hình ảnh không hiển thị. Có điều gì tôi đang làm sai?

 <?php echo $image = wp_get_attachment_image_url( $entry['slide_image_id'], true, 'full'); ?>

Lưu ý bên: $ entry ['slide_image_id'] là những gì đang được sử dụng để gọi trường tệp lặp lại của tôi.


wp_get_attachment_image_url()trả về một URL - không phải là một yếu tố hình ảnh.
bosco

Điều gì sẽ là giải pháp tốt nhất trong những gì tôi đang tìm kiếm @bosco
user3756781

Ồ, thật khó chịu khi mọi thuộc tính của đầu ra img đều có thể lọc được add_filter('wp_get_attachment_image_attributes' ...ngoại trừ chỉ có chiều cao và chiều rộng được mã hóa cứng.
squarecandy

Câu trả lời:


9

Đối số của bạn cho cả hai wp_get_attachment_image_url()wp_get_attachment_image()theo thứ tự sai - kiểm tra tài liệu được liên kết để biết chi tiết. Ngoài ra, wp_get_attachment_image_url()trả về một URL - không phải là một yếu tố hình ảnh thực tế.

Việc loại bỏ các thuộc tính widthheightkhỏi <img>các thành phần là không thể thực hiện được: nếu bố cục của trang bị ảnh hưởng bởi kích thước của hình ảnh, bố cục sẽ "trục trặc" ngay khi CSS chỉ định kích thước của hình ảnh hoặc hình ảnh được tải.

Thật không may, wp_get_attachment_image()chức năng hiện tại (kể từ WordPress 4.4.1) được mã hóa cứng để xuất các thuộc tính widthheight <img>thuộc tính (xem vé số 14110 ), vì vậy bạn sẽ cần tự mình xây dựng đánh dấu hình ảnh. Điều này có thể được thực hiện bằng cách lấy tín hiệu từ wp_get_attachment_image()nguồn của :

<?php
  $attachment = get_post( $entry['slide_image_id'] );

  if( $attachment ) {
    $img_size_class = 'full';
    $img_atts = array(
      'src'   => wp_get_attachment_image_url( $entry['slide_image_id'], $img_size_class, false ),
      'class' => 'attachment-' . $img_size_class . ' size-' . $img_size_class,
      'alt'   => trim(strip_tags( get_post_meta( $entry['slide_image_id'], '_wp_attachment_image_alt', true) ) )
    );

    //If an 'alt' attribute was not specified, try to create one from attachment post data
    if( empty( $img_atts[ 'alt' ] ) )
      $img_atts[ 'alt' ] = trim(strip_tags( $attachment->post_excerpt ));
    if( empty( $img_atts[ 'alt' ] ) )
      $img_atts[ 'alt' ] = trim(strip_tags( $attachment->post_title ));

    $img_atts = apply_filters( 'wp_get_attachment_image_attributes', $img_atts, $attachment, $img_size_class );

    echo( '<img ' );
    foreach( $img_atts as $name => $value ) {
      echo( $name . '="' . $value . '" ';
    }
    echo( '/>' );
  }
?>

Tôi đã làm theo liên kết bạn gửi cho tôi và có thể tạo ra hình ảnh mà không gặp vấn đề cũng như sử dụng giải pháp của bạn. Vấn đề duy nhất tôi gặp phải là làm thế nào với thẻ alt. Với liên kết bạn đã gửi cho tôi, thẻ alt không được tạo và với thẻ của bạn là tĩnh (đó là lý do tại sao tôi nghĩ wp_get_attachment_image sẽ là lựa chọn tốt nhất). Làm cách nào để tạo thẻ alt với ví dụ bạn đang hiển thị? @bosco
dùng3756781

Vấn đề hóa ra phức tạp hơn tôi dự đoán. Đã cập nhật câu trả lời của tôi để bao gồm các <img>bit tạo thuộc tính từ wp_get_attachment_image()- mặc dù tôi đã bỏ qua srcsetsizescác phần được sử dụng cho hình ảnh phản hồi. Nếu những điều này là cần thiết, việc tạo ra một chức năng get_sizeless_attachment_image()sẽ được khuyến khích.
bosco

cảm ơn bạn điều này đã làm việc hoàn hảo. Có một lỗi trong mã làm sai tiếng vang ký tự ($ name. '= "'. $ Value. '"'; Nên là echo ($ name. '= "'. $ Value. '"');. Cảm ơn bạn một lần nữa vì sự giúp đỡ của bạn @bosco
user3756781 7/1/2016

12

Giải pháp thay thế

Tôi đã thực hiện một số thử nghiệm / đào lõi và tìm thấy cách khắc phục thông qua wp_constrain_dimensionsbộ lọc:

// Add filter to empty the height/width array
add_filter( 'wp_constrain_dimensions', '__return_empty_array' );
// Display image html
echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );
// Remove filter again
remove_filter( 'wp_constrain_dimensions', '__return_empty_array' );

Điều này dường như cho phép chúng ta loại bỏ các thuộc tính chiều caochiều rộng khỏi html hình ảnh được tạo wp_get_attachment_image(), mà không cần lấy ra các khẩu reg-ex. Chúng tôi cũng có thể sử dụng wp_get_attachment_image_srcbộ lọc theo cách tương tự để xóa chiều rộng / chiều cao nhưng vẫn giữ url .

Ghi chú

Cách giải quyết này sẽ loại bỏ các thuộc tính srcsetsizeslà tốt. Nhưng cũng có thể đặt các thuộc tính srcsetkích thước thông qua $attrđối số đầu vào thứ tư .

Như được đề cập bởi @bosco, bạn đã chuyển đổi các đối số đầu vào biểu tượngkích thước trong:

echo wp_get_attachment_image( $entry['slide_image_id'], true, 'full' );

Sử dụng cái này thay thế:

echo wp_get_attachment_image( $entry['slide_image_id'], 'full', true );

1

Tôi chỉ đơn giản là sử dụng CSS cho cái này. Nó không hoạt động trong tất cả các kịch bản, nhưng thường thì nó sẽ đủ. Hãy chụp ảnh 300px x 300px:

max-height: 300px;
max-width: 300px;
width: auto;

Điều này hạn chế kích thước của hình ảnh mà không làm mất tỷ lệ chiều rộng và chiều cao của nó. Nếu không, bạn cũng có thể sử dụng REGEX:

$html = preg_replace(array('/width="[^"]*"/', '/height="[^"]*"/'), '', $html);

Đây là một số lựa chọn thay thế. Chúc may mắn.

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.