In meinem letzten Beitrag bin ich nachgegangen, wie man die Anhangs-ID eines Anhangs von einer seiner Vorschaubild-URLs erhält. Heute gehe ich einen Schritt weiter und zeige, wie man den Vorschaubild-Pfad über dessen URL erhält.

Dieser Ansatz startet gleich wie mein vorheriger, da wir zuerst die Beitrags-ID des Anhangs benötigen. Bitte lies meinen vorherigen Beitrag für weitere Informationen dazu. Dann verwenden wir einen ähnlichen regulären Ausdruck, aber mit einer benannten Gruppe, um Zugriff auf die eigentliche Abmessung des Vorschaubilds im Array-Index dimension zu bekommen.

Danach können wir die integrierte Funktion image_get_intermediate_size verwenden, um den relativen Pfad zum Vorschaubild zu erhalten, und verbinden diesen mit dem Pfad zum Upload-Verzeichnis.

Da es in meinem Fall sein kann, dass ich nicht nur Vorschaubilder übergebe, sondern auch Bilder in voller Größe, prüfe ich zuerst, ob die URL überhaupt die Abmessung für ein Vorschaubild enthält.

Der Code sieht dann folgendermaßen aus:

$image = 'https://domain.tld/wordpress/2023/05/my-image-1024x768.jpg';
// replace dimensions from image
$attachment_url = preg_replace( '/\-\d+x\d+\.(jpe?g|png|gif)$/', '.$1', $image );
// get the post ID of the attachment
$post_id = \attachment_url_to_postid( $attachment_url );
$size = '';

\preg_match( '/\-(?<dimension>\d+x\d+)\.(jpe?g|png|gif)$/', $image, $matches );

// if we got a dimension, store the size as array, width as first array key, height as second
if ( ! empty( $matches['dimension'] ) ) {
	$size = \explode( 'x', $matches['dimension'] );
}

if ( $size ) {
	// it's a thumbnail, so get its thumbnail path
	$image = \wp_upload_dir()['basedir'] . '/' . \image_get_intermediate_size( $post_id, $size )['path'];
}
else {
	// it's the full image, just get its path
	$image = \get_attached_file( $post_id );
}
Code-Sprache: PHP (php)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert