Apakah ada cara saya dapat mengambil URL dari suatu gambar dan menemukan lampiran atau id posting dari gambar itu dalam basis data?
Inilah situasinya:
Saya dalam satu lingkaran memeriksa semua tag 'img' yang dikelilingi oleh tag 'a' di konten posting saya. jika atribut src dari tag 'img' tidak cocok dengan atribut href dari tag 'a' luar, maka saya ingin mengganti tag 'img'. Dalam melakukan ini, jika 'img' yang akan dihapus ada di galeri, saya ingin menghapus posting itu, dan kemudian meletakkan 'img' pengganti saya di tempatnya. Saya mencoba menggunakan fungsi seperti ini:
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;
}
Ini tampaknya tidak benar karena secara ironis pedoman ini tidak unik secara global. Saya telah (sebelumnya dalam skrip yang sama) mengunggah file dengan nama yang sama (mengapa? Karena itu resolusi yang lebih tinggi dan saya mencoba untuk mengganti versi resolusi rendah dari gambar yang sama) dan walaupun wordpress akan menyimpan gambar dengan nama yang berbeda di direktori, pedoman itu ditetapkan sama. (mungkin bug).
Apakah ada teknik lain yang bisa saya gunakan?
sumber
Jawaban:
Fungsi besar yang dikembangkan untuk plugin berat pada gambar:
sumber
_wp_attached_file
dan_wp_attachment_metadata
?Semua fungsi kompleks tersebut dapat direduksi menjadi satu fungsi sederhana:
attachment_url_to_postid ()
Anda hanya perlu mengurai URL gambar untuk mengambil ID lampiran:
Itu yang kamu butuhkan.
sumber
Saya memodifikasi kode Rarst untuk memungkinkan Anda mencocokkan hanya nama file, bukan path lengkap. Ini bermanfaat jika Anda akan melakukan sideload gambar jika tidak ada. Saat ini ini hanya berfungsi jika nama file unik tetapi saya akan menambahkan pemeriksaan hash nanti untuk membantu dengan gambar yang memiliki nama file yang sama.
sumber
Ok saya menemukan jawaban bahwa tidak ada yang ada di internet saya sudah mencari hari sekarang. Perlu tambang ini hanya bekerja jika tema atau plugin menggunakan
WP_Customize_Image_Control()
jika Anda menggunakanWP_Customize_Media_Control()
yangget_theme_mod()
akan kembali ID dan tidak url.Untuk solusi saya, saya menggunakan versi yang lebih baru
WP_Customize_Image_Control()
Banyak posting di forum memiliki
get_attachment_id()
yang tidak berfungsi lagi. Saya menggunakanattachment_url_to_postid()
Inilah cara saya bisa melakukannya. Semoga ini bisa membantu seseorang di luar sana
Markup
sumber
Inilah solusi alternatif:
Sejak WP 4.0 mereka memperkenalkan fungsi
attachment_url_to_postid()
yang berperilaku mirip dengan Andafind_image_post_id()
Silakan periksa url ini untuk referensi Anda.
sumber