Come ottengo l'attachment_id?

31 ott 2014, 02:49:06
Visualizzazioni: 39.4K
Voti: 9

È una cosa banale, ma non riesco davvero a trovare una risposta. Ho visto alcuni suggerimenti come cercare nel database ecc., ma è una follia.

In pratica, ho un metabox con un pulsante di caricamento che consente di caricare o selezionare un'immagine esistente dalla Libreria Media, ecco come ottengo l'URL di questa immagine:

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

Ovviamente voglio che venga visualizzata l'esatta dimensione di questa immagine quindi devo usare:

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

La domanda è come ottengo l'attachment_id di _my_image_metabox? Ho cercato letteralmente ovunque e non ci sono risposte sensate, come si suppone che funzioni wp_get_attachment_image_src() se non c'è una singola riga su come ottenere $attachment_id nel Codex? :)

[aggiornamento]

var_dump($my_image) restituisce:

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

Il salvataggio dei dati è piuttosto complicato poiché uso la mia classe di generazione metabox personalizzata, qualcosa del genere: https://github.com/nyordanov/SmartMetaBox/blob/master/SmartMetaBox.php

Come posso quindi iniettare il corretto attachment_id in my_image? Aggiungo che ho diversi (10) campi come questo e vorrei che ognuno avesse un attachment_id separato e univoco.

6
Commenti

Probabilmente il meta box non ha un ID allegato associato a meno che tu non lo aggiunga, $my_image è solo una stringa. Imposta get_post_meta su false e verifica cosa restituisce effettivamente.

Wyck Wyck
31 ott 2014 02:54:10

Per favore aggiorna la domanda e mostrandoci come salvi i dati. Il recupero dovrebbe essere piuttosto semplice a quel punto.

kaiser kaiser
31 ott 2014 04:06:33

Grazie, domanda aggiornata :) Non ho bisogno di avere un attachment_id qui però, ho solo bisogno di ottenere la dimensione corretta per l'immagine aggiunta al metabox (è nella Media Library quindi ha le miniature appropriate), ma penso che sia l'unico modo (a parte le regexp).

Wordpressor Wordpressor
31 ott 2014 16:28:35

C'è Convertire un URL in un Attachment / Post ID, che potrebbe essere utile. A parte ciò, dovresti salvare esplicitamente l'id, come ha detto @Wyck.

Nicolai Grossherr Nicolai Grossherr
31 ott 2014 16:34:43

Ci sto lavorando da un po' e mi chiedo - come posso ottenere l'ID corretto qui?

Wordpressor Wordpressor
23 nov 2014 21:32:05

se sei all'interno del loop su una pagina di attachment, un semplice get_the_ID() sarà sufficiente.

Fabien Snauwaert Fabien Snauwaert
17 mar 2019 01:02:57
Mostra i restanti 1 commenti
Tutte le risposte alla domanda 6
1
13

Ok, tutte quelle funzioni ipercomplesse possono essere ridotte a un semplice comando: attachment_url_to_postid

Ti basta analizzare l'URL dell'immagine per ottenere l'ID dell'allegato:

<?php

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

?>

È tutto ciò che ti serve.

1 nov 2015 09:03:13
Commenti

Questa è DI GRAN LUNGO la risposta migliore. Il motivo è che nessun'altra funzione come url_to_postid o get_page_by_path restituirà un ID se il media è allegato a un post.

SlickRemix SlickRemix
8 gen 2022 21:15:29
0

Sono in ritardo per rispondere a questa domanda ma funzionerà.

$attachment_id = get_post_thumbnail_id( $post->ID );
$url = wp_get_attachment_image_src($attachment_id, 'dimensioni-desiderate');
15 lug 2020 23:31:29
0

Avevo lo stesso problema mentre utilizzavo il plugin CMB, ho risolto aggiungendo una funzione personalizzata a functions.php per ottenere l'ID dell'immagine utilizzando l'URL dell'immagine:

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]; //ritorna l'ID dell'immagine
}

Nel tuo tema:

$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');
9 apr 2015 19:04:33
0

Quello che faccio in questi casi è salvare l'ID in un campo input nascosto insieme all'URL.

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">Carica Immagine</button>';

    echo $out;
}  

Nello script di gestione del caricamento:

attachment = custom_uploader.state().get('selection').first().toJSON();
    $('#my_image').val(attachment.url);
    $('#my_image_id').val(attachment.id); // Aggiungi semplicemente questa riga

Poi negli altri callback:

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

Questa è semplicemente la mia soluzione e qualcuno potrebbe trovarne una migliore. Tuttavia, l'ho trovata più veloce rispetto all'interrogazione del database per recuperare l'ID dell'allegato associato.

9 set 2015 10:00:43
0

Tutti i meta dei post che stai salvando sono associati a un post di tipo attachment, quindi puoi considerare che $post->ID sia l'ID dell'allegato.

9 set 2015 09:18:15
1
-1

Prova con questo:

$attachment_id = $wpdb->get_var( 
    $wpdb->prepare( 
        "SELECT wposts.ID 
            FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta 
            WHERE wposts.ID = wpostmeta.post_id 
            AND wpostmeta.meta_key = '_wp_attached_file' 
            AND wpostmeta.meta_value = '%s' 
            AND wposts.post_type = 'attachment'", 
        $url
    ) 
);
9 set 2015 09:08:20
Commenti

Per favore, spiega cosa fa il tuo codice e come funziona. Inoltre, formatta il tuo codice, è illeggibile

Pieter Goosen Pieter Goosen
9 set 2015 09:40:36