Aus verschiedenen Gründen kann ich die integrierte Thumbnail-Funktion von Wordpress nicht verwenden.
Ich möchte stattdessen das erste Bild im Beitrag als Miniaturbild verwenden.
Folgendes habe ich im Codex gefunden: Das erste mit dem Beitrag verknüpfte Bild anzeigen .
Das Problem dabei ist jedoch, dass, wenn der Beitrag mehrere Bilder enthält, das erste Bild im Beitrag jedoch nicht das zuerst hochgeladene ist, das zweite anstelle des ersten Bilds angezeigt wird.
Also entschied ich mich für etwas Ähnliches wie diesen Ansatz , der einen regulären Ausdruck verwendet, um the_content
zu analysieren und den ersten Beitrag zu finden.
Das funktioniert einwandfrei, aber am Ende habe ich die Bildgröße, die im Beitrag verwendet wurde, und ich möchte nur die Thumbnail-Größe.
Also, hier ist die Frage: Wenn ich einen Link zu einem Bild habe, gibt es eine Möglichkeit, eine andere Größe zu erhalten?
Scheint, was ich brauche, ist, irgendwie die Anhangs-ID zu erhalten, damit ich die Bildgröße mit diesem abrufen kann:
wp_get_attachment_link( $id, 'thumbnail' );
Das Problem ist, wie bekomme ich eine ID, wenn ich nur die URL habe ?
Ich habe mich für diese Methode entschieden, die auf der Antwort von @ AndresYanez basiert:
function get_image_id_by_link($link)
{
global $wpdb;
$link = preg_replace('/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $link);
return $wpdb->get_var("SELECT ID FROM {$wpdb->posts} WHERE BINARY guid='$link'");
}
Dies ist viel prägnanter (da es nicht durch den Rahmen springt, zuerst die Erweiterung zu entfernen und sie dann wieder einzufügen) und ein wenig genauer (da der .
maskiert wird und bei der Abfrage die Groß- und Kleinschreibung beachtet wird).
function get_attachment_id_from_src ($src) {
global $wpdb;
$reg = "/-[0-9]+x[0-9]+?.(jpg|jpeg|png|gif)$/i";
$src1 = preg_replace($reg,'',$src);
if($src1 != $src){
$ext = pathinfo($src, PATHINFO_EXTENSION);
$src = $src1 . '.' .$ext;
}
$query = "SELECT ID FROM {$wpdb->posts} WHERE guid='$src'";
$id = $wpdb->get_var($query);
return $id;
}
Dank an Pathorsley: http://www.pathorsley.com/code/get-the-wordpress-post-attachment-id-from-an-image-src/
Manchmal The Codex ist das nicht falsch ...
Dies ist ein leicht modifiziertes Beispiel aus dem Codex.
<?php
// Do this inside The Loop (where $post->ID is available).
global $post;
$args = array(
'post_type' => 'attachment'
,'numberposts' => 1
,'post_status' => null
,'post_parent' => $post->ID
,'orderby' => 'ID'
,'order' => 'ASC'
);
$attachments = get_posts( $args );
if ( $attachments )
{
foreach ( $attachments as $attachment )
{
echo apply_filters( 'the_title' , $attachment->post_title );
the_attachment_link( $attachment->ID , false );
}
}
?>
Die Änderungen am Codex-Beispiel sind einfach: Die numberposts
wird auf 1 gesetzt, der Wert für orderby
ist die ID
und es wird nach ASC
sortiert, um den Beitrag mit der niedrigsten ID zuerst abzurufen.
Hier ist der Grund, warum smart : IDs werden nacheinander vergeben, sodass der erste hochgeladene Beitrag die niedrigste ID hat.
Im obigen Beispiel können Sie einfach die letzte Funktion mit wp_get_attachment_link()
austauschen und in einer Variablen speichern, die Sie später wiederverwenden können.