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

Um auf deiner eigenen Website zu antworten, gib die URL deiner Antwort ein, die einen Link zur Permalink-URL dieses Beitrags enthalten sollte. Deine Antwort wird dann (möglicherweise nach der Moderation) auf dieser Seite erscheinen. Möchtest du deine Antwort aktualisieren oder entfernen? Aktualisiere oder lösche deinen Beitrag und gib die URL deines Beitrags noch einmal ein. (Mehr über die Funktion von Webmentions erfahren)