it-swarm.com.de

Wie bekomme ich attachment_id?

Das ist trivial, aber ich kann wirklich keine Antwort finden, ich habe einige Hinweise wie Datenbanksuche usw. gesehen, aber das ist Wahnsinn.

Grundsätzlich habe ich eine Metabox mit Upload-Schaltfläche, mit der Sie ein vorhandenes Bild aus der Medienbibliothek hochladen oder auswählen können. So erhalte ich die URL dieses Bildes:

$my_image = get_post_meta($post->ID, '_my_image_metabox', true);

Natürlich möchte ich, dass die genaue Größe dieses Bildes angezeigt wird, also muss ich Folgendes verwenden:

wp_get_attachment_image_src($attachment_id, 'desired-size');

Die Frage ist, wie ich attachment_id von _my_image_metabox bekomme. Ich habe buchstäblich überall gesucht und es gibt keine vernünftigen Antworten. Wie soll wp_get_attachment_image_src() funktionieren, wenn es im Codex keine einzige Zeile zum Abrufen von $attachment_id gibt? :)

[aktualisiert]

var_dump($my_image) gibt zurück:

array(1) { [0]=> string(86) "http://localhost/theme/wp-content/uploads/2014/10/my_image.jpg" }

Das Speichern der Daten ist ziemlich kompliziert, da ich meine eigene Metabox-generierende Klasse verwende, etwa die folgende: https://github.com/nyordanov/SmartMetaBox/blob/master/SmartMetaBox.php

Wie füge ich dann die richtige attachment_id zu my_image hinzu? Ich füge hinzu, ich habe mehrere (10) Felder wie dieses und möchte, dass jedes einzelne eine separate, eindeutige attachment_id hat.

3
Wordpressor

Ok, all diese komplexen Funktionen können auf einen einfachen Befehl reduziert werden: attachment_url_to_postid

Sie müssen nur die Bild-URL analysieren, um die Anhang-ID abzurufen:

<?php

   $attachment_id = attachment_url_to_postid( $image_url );
   echo $attachment_id;

?>

Das ist alles was du brauchst.

3
Ego Ipse

Was ich in solchen Fällen mache, ist, dass ich die ID in einer versteckten Eingabe zusammen mit der URL speichere.

function meta_image_upload() {
    global $post;
    $my_image = get_post_meta($post->ID, '_my_image_metabox', true);
    $my_image_id = get_post_meta($post->ID, '_my_image_id_metabox', true);

    $out = '<input id="my_image" type="text" name="my_uploaded_image" value="'. $my_image .'">';
    $out .= '<input id="my_image_id" type="hidden" name="my_uploaded_image_id" value="'. $my_image_id .'">';
    $out .= '<button id="my_image_upload">Upload Image</button>';

    echo $out;
}  

Auf dem Upload-Handler-Skript:

attachment = custom_uploader.state().get('selection').first().toJSON();
    $('#my_image').val(attachment.url);
    $('#my_image_id').val(attachment.id); // Just add this line

Dann bei anderen Rückrufen:

global $post;
$my_image_id = get_post_meta($post->ID, '_my_image_id_metabox', true);
wp_get_attachment_image_src($my_image_id, 'desired-size');

Das ist nur meine Lösung und jemand könnte sich eine bessere einfallen lassen. Ich fand es jedoch schneller, als die Datenbank abzufragen, um die zugehörige Anhangs-ID abzurufen.

1
Abhik

Ich hatte das gleiche Problem, als ich das CMB-Plugin verwendete. Ich habe das Hinzufügen einer benutzerdefinierten Funktion zu functions.php gelöst, um die Bild-ID mithilfe der Bild-URL zu erhalten:

functions.php

function cmb_get_image_id($image_src) {
    global $wpdb;
    $image = $wpdb->get_col($wpdb->prepare("SELECT ID FROM $wpdb->posts WHERE guid='%s';", $image_src )); 
    return $image[0]; //return the image ID
}

In Ihrem Thema:

$my_image = get_post_meta($post->ID, '_my_image_metabox', false);
$attachment_id = cmb_get_image_id($my_image);
wp_get_attachment_image_src($attachment_id, 'desired-size');
1
Tomás Ramírez

Alle Post-Metas, die Sie speichern, werden an einen Post vom Typ Anhang angehängt. Sie können also berücksichtigen, dass $post->ID die Anhang-ID ist.

0
Ahir Hemant