¿Hay alguna forma de tomar una URL de una imagen y encontrar el archivo adjunto o la identificación de publicación de esa imagen en la base de datos?
Aquí está la situación:
Estoy en un ciclo revisando todas las etiquetas 'img' que están rodeadas por etiquetas 'a' en el contenido de mi publicación. si el atributo src de la etiqueta 'img' no coincide con el atributo href de la etiqueta 'a' externa, entonces quiero reemplazar la etiqueta 'img'. Al hacer esto, si el 'img' que se va a eliminar está en la galería, quiero eliminar esa publicación y luego colocar mi 'img' de reemplazo en su lugar. Intenté usar una función como esta:
function find_image_post_id($url) {
global $wpdb;
$postid = $wpdb->get_var($wpdb->prepare("SELECT DISTINCT ID FROM $wpdb->posts WHERE guid='$url'"));
if ($postid) {
return $postid;
}
return false;
}
Aparentemente, esto no es correcto porque, irónicamente, no es irónicamente único a nivel mundial. Había subido (anteriormente en el mismo script) un archivo con el mismo nombre (¿por qué? Porque era de mayor resolución y estoy tratando de reemplazar las versiones de baja resolución de la misma imagen) y aunque Wordpress guardará la imagen con un nombre diferente en el directorio, los guid se configuraron para ser iguales. (posiblemente un error).
¿Hay otra técnica que pueda usar?
fuente
Respuestas:
Funcionalidad enormemente mejorada desarrollada para complementos pesados en imágenes:
fuente
_wp_attached_file
y_wp_attachment_metadata
?Todas esas funciones complejas se pueden reducir a una función simple:
attach_url_to_postid ()
Solo necesita analizar la URL de la imagen para recuperar la ID del archivo adjunto:
Eso es todo lo que necesitas.
fuente
Modifiqué el código de Rarst para permitirle que coincida solo con el nombre del archivo en lugar de la ruta completa. Esto es útil si está a punto de cargar la imagen si no existe. Actualmente, esto solo funciona si los nombres de los archivos son únicos, pero más adelante agregaré una comprobación de hash para ayudar con las imágenes que tienen el mismo nombre de archivo.
fuente
Ok, encontré la respuesta que nadie tiene en la red que he estado buscando durante días. Tenga en mina de esto sólo funciona si su tema o plugin está utilizando el
WP_Customize_Image_Control()
si está utilizandoWP_Customize_Media_Control()
elget_theme_mod()
devolverá el ID y no la URL.Para mi solución, estaba usando la versión más nueva
WP_Customize_Image_Control()
Muchas publicaciones en los foros tienen el
get_attachment_id()
que ya no funciona. solíaattachment_url_to_postid()
Así es como pude hacerlo. Espero que esto ayude a alguien por ahí
Margen
fuente
Aquí hay una solución alternativa:
Desde WP 4.0 introdujeron una función
attachment_url_to_postid()
que se comporta de manera similar a la de tufind_image_post_id()
Por favor, consulte esta url para su referencia.
fuente