Existe alguma maneira de eu pegar um URL de uma imagem e encontrar o anexo ou o ID da postagem no banco de dados?
Aqui está a situação:
Estou repetindo todas as tags 'img' que estão cercadas por 'a' no meu conteúdo da postagem. se o atributo src da tag 'img' não corresponder ao atributo href da tag 'a' externa, então desejo substituir a tag 'img'. Ao fazer isso, se o 'img' a ser removido estiver na galeria, desejo excluir esse post e, em seguida, colocar o meu 'img' substituto em seu lugar. Eu tentei usar uma função 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, isso não está certo, porque o guia não é ironicamente único em todo o mundo. Eu tinha (anteriormente no mesmo script) enviado um arquivo com o mesmo nome (por quê? Porque era de maior resolução e estou tentando substituir as versões de baixa resolução da mesma imagem) e, embora o wordpress salve a imagem com um nome diferente em No diretório, os guias foram definidos como iguais. (possivelmente um bug).
Existe outra técnica que eu possa usar?
fonte
Respostas:
Função altamente aprimorada desenvolvida para plugins pesados em imagens:
fonte
_wp_attached_file
e_wp_attachment_metadata
?Todas essas funções complexas podem ser reduzidas a uma função simples:
attachment_url_to_postid ()
Você só precisa analisar o URL da imagem para recuperar o ID do anexo:
É tudo o que você precisa.
fonte
Modifiquei o código da Rarst para permitir que você correspondesse apenas o nome do arquivo em vez do caminho completo. Isso é útil se você estiver prestes a carregar a imagem se ela não existir. Atualmente, isso só funciona se os nomes de arquivo forem únicos, mas adicionarei uma verificação de hash posteriormente para ajudar com imagens com o mesmo nome de arquivo.
fonte
Ok, eu encontrei a resposta que ninguém tem na rede que eu estava procurando há dias. Lembre-se de que isso só funciona se o seu tema ou plugin estiver usando o
WP_Customize_Image_Control()
se você estiver usandoWP_Customize_Media_Control()
oget_theme_mod()
retornará o ID e não o URL.Para minha solução, eu estava usando a versão mais recente
WP_Customize_Image_Control()
Muitas postagens nos fóruns têm o
get_attachment_id()
que não funciona mais. eu useiattachment_url_to_postid()
Aqui está como eu fui capaz de fazê-lo. Espero que isto seja útil a alguém
Marcação
fonte
Aqui está uma solução alternativa:
Desde o WP 4.0, eles introduziram uma função
attachment_url_to_postid()
que se comporta de maneira semelhante à suafind_image_post_id()
Por favor, verifique este URL para sua referência.
fonte