Existe-t-il un moyen de prendre l'URL d'une image et de trouver la pièce jointe ou l'ID de publication de cette image dans la base de données?
Voici la situation:
Je suis en train de parcourir toutes les balises 'img' entourées par les balises 'a' dans le contenu de mon message. si l'attribut src de la balise 'img' ne correspond pas à l'attribut href de la balise 'a' extérieure, je souhaite remplacer la balise 'img'. Ce faisant, si le "img" à supprimer est dans la galerie, je souhaite supprimer ce message, puis mettre mon remplaçant "img" à sa place. J'ai essayé d'utiliser une fonction comme celle-ci:
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;
}
Cela n’apparaît apparemment pas correct, car le guide n’est ironiquement pas unique au monde. J'avais (précédemment dans le même script) téléchargé un fichier portant le même nom (pourquoi? Car il s'agissait d'une résolution supérieure et j'essaie de remplacer les versions basse résolution de la même image) et bien que wordpress enregistre l'image sous un nom différent le répertoire, les guides étaient définis pour être les mêmes. (éventuellement un bug).
Y a-t-il une autre technique que je peux utiliser?
la source
Réponses:
Fonction massivement améliorée développée pour le plugin lourd d'images:
la source
_wp_attached_file
et_wp_attachment_metadata
?Toutes ces fonctions complexes peuvent être réduites à une seule fonction:
attachment_url_to_postid ()
Il vous suffit d'analyser l'URL de l'image pour récupérer l'ID de pièce jointe:
C'est tout ce dont vous avez besoin.
la source
J'ai modifié le code de Rarst pour vous permettre de ne faire correspondre que le nom du fichier au lieu du chemin complet. Ceci est utile si vous êtes sur le point de charger de côté l’image si elle n’existe pas. Actuellement, cela ne fonctionne que si les noms de fichiers sont uniques, mais j'ajouterai une vérification de hachage ultérieurement pour aider les images portant le même nom de fichier.
la source
Ok j'ai trouvé la réponse que personne n'a sur le net que je cherchais depuis plusieurs jours. Garder dans le mien, cela ne fonctionne que si votre thème ou plugin utilise le
WP_Customize_Image_Control()
si vous utilisezWP_Customize_Media_Control()
leget_theme_mod()
renverra l'identifiant et non l'url.Pour ma solution, j'utilisais la version la plus récente
WP_Customize_Image_Control()
Beaucoup de messages sur les forums ont le
get_attachment_id()
qui ne fonctionne plus. j'ai utiliséattachment_url_to_postid()
Voici comment j'ai pu le faire. J'espère que cela aide quelqu'un là-bas
Balisage
la source
Voici une solution alternative:
Depuis WP 4.0, ils ont introduit une fonction
attachment_url_to_postid()
qui se comporte de la même manière que la vôtre.find_image_post_id()
S'il vous plaît vérifier le cette URL pour votre référence.
la source