it-swarm.com.de

Wie kann ich eine andere Bildgröße erhalten, wenn ich nur den Link habe?

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 ?

2
Joseph Silber

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).

6
Joseph Silber
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/

1
Andres Yanez

Der Codex ist eine gültige Quelle

Manchmal The Codex ist das nicht falsch ...

Zeige Anhänge für den aktuellen Beitrag

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 );
    }
}
?>

Seien Sie schlau - nutzen Sie das System hinter dem System

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.

0
kaiser