it-swarm.com.de

Entfernen Sie Dimension aus wp_get_attachment_image

Bei der Verwendung von wp_get_attachment_image treten Probleme beim Entfernen der Breite und Höhe aus meinen Anhangsbildern auf. Dies ist, was ich verwende, um das Bild anzuzeigen

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

Wie es aussieht ist der Quellcode

 <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" />

Ich möchte, dass es so angezeigt wird

 <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" />

Das Bild wird aus einem wiederholbaren Dateifeld mit einem Eintrag mit der ID slide_image_id abgerufen. Ich habe mich umgesehen und bemerkt, dass ich wp_get_attachment_image_url verwenden soll, aber wenn ich es mit meinem obigen Code verwende, wird das Bild nicht angezeigt. Gibt es etwas, was ich falsch mache?

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

Randnotiz: $ entry ['slide_image_id'] wird verwendet, um mein wiederholbares Dateifeld aufzurufen.

10
user3756781

Ihre Argumente für wp_get_attachment_image_url() und wp_get_attachment_image() sind in der falschen Reihenfolge - überprüfen Sie die verknüpfte Dokumentation auf Details. Darüber hinaus gibt wp_get_attachment_image_url() eine URL zurück - kein tatsächliches Bildelement.

Das Entfernen der Attribute width und height aus <img>-Elementen ist nicht ratsam: Wenn das Layout der Seite in irgendeiner Weise von der Größe des Bildes beeinflusst wird, kommt es zu einem "Glitch", sobald das CSS die Abmessungen des Bildes oder das Bild angibt selbst lädt.

Leider ist die Funktion wp_get_attachment_image() derzeit (ab WordPress 4.4.1) fest programmiert, um die Attribute width und height<img> auszugeben (siehe ticket # 14110 ). Daher müssen Sie das Image-Markup selbst erstellen. Dies kann erreicht werden, indem Hinweise aus der Quelle von wp_get_attachment_image() genommen werden :

<?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( '/>' );
  }
?>
8
bosco

Workaround

Ich habe einige grundlegende Grabungen/Tests durchgeführt und über den wp_constrain_dimensions-Filter eine Problemumgehung gefunden:

// 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' );

Dies scheint es uns zu ermöglichen, die Attribute height und width aus dem generierten Bild-HTML von wp_get_attachment_image() zu entfernen, ohne die Reg-Ex-Kanonen zu entfernen. Wir könnten auch den wp_get_attachment_image_src-Filter auf ähnliche Weise verwenden, um width / height zu entfernen, aber die url beizubehalten.

Anmerkungen

Diese Problemumgehung entfernt auch die Attribute srcset und sizes. Es ist aber auch möglich, die Attribute srcset und sizes über das vierte $attr -Eingabeargument festzulegen.

Wie von @bosco erwähnt, haben Sie das Symbol und Größe Eingabeargumente umgestellt in:

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

Verwenden Sie dies stattdessen:

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

Ich habe einfach CSS für dieses verwendet. Es funktioniert nicht in allen Szenarien, aber oft genug. Nehmen wir ein 300 x 300 Pixel großes Bild:

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

Dadurch werden die Abmessungen des Bildes beschränkt, ohne dass das Verhältnis von Breite zu Höhe verloren geht. Ansonsten können Sie auch REGEX verwenden:

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

Dies waren einige Alternativen. Viel Glück.

1
JMRC