Oto przykład tego, jak ominąć to ograniczenie za pomocą akcji / haków:
function new_attachment( $att_id ){// the post this was sideloaded into is the attachments parent!// fetch the attachment post
$att = get_post( $att_id );// grab it's parent
$post_id = $att->post_parent;// set the featured post
set_post_thumbnail( $post_id, $att_id );}// add the function above to catch the attachments creation
add_action('add_attachment','new_attachment');// load the attachment from the URL
media_sideload_image($image_url, $post_id, $post_id);// we have the image now, and the function above will have fired too setting the thumbnail ID in the process, so lets remove the hook so we don't cause any more trouble
remove_action('add_attachment','new_attachment');
Chodzi o to, że po media_sideload_imageuruchomieniu:
pobiera obraz
dodaje go jako załącznik (post typu attachment)
następnie dołącza ten załącznik do posta, którego identyfikator podałeś ($ post_id)
Problem polega na tym, że nie zapewnia on nowo utworzonego identyfikatora wpisów w załączniku.
Ale po utworzeniu załącznika uruchamiana jest akcja zawierająca jego identyfikator. Możemy się do tego przyczepić przed utworzeniem załącznika i zapisać wyróżnioną miniaturę z podanym nam identyfikatorem posta, a następnie odczepić.
Jeśli to odpowiada na twoje pytanie, czy możesz je oznaczyć jako prawidłowe?
Tom J Nowell
Nie mogę przeczytać twojego angielskiego. Czy ktoś może edytować ten post?
HiDd3N,
2
@ HiDd3N Upraszczam niektóre z używanych angielskich, powinny mieć bardziej popularne słowa z niższym wiekiem czytelniczym
Tom J Nowell
6
Zbudowałem funkcję, aby uzyskać identyfikator z DB, wyszukiwanie według adresu URL.
function get_attachment_id_from_src ($image_src){global $wpdb;
$query ="SELECT ID FROM {$wpdb->posts} WHERE guid='$image_src'";
$id = $wpdb->get_var($query);return $id;}
Odpowiedź @ Toma J Nowella jest natychmiastowa. Znalazłem inną alternatywę (przy użyciu różnych funkcji) wyjaśnioną tutaj, ale podoba mi się jeszcze jedna.
W moim przypadku mam tablicę $ postów ze wszystkimi postami, które chcę wstawić oraz osobne $ media (takie same klucze $ nid jak $ posts) z mediami. Mój kod jest tym samym rozwiązaniem, co Tom, ale został ponownie użyty w celu użycia anonimowej funkcji:
W moim przypadku zakładam, że pierwszy element w każdym $ media [$ nid] powinien być wyróżnionym obrazem jego postu.
WordPress powinien zdecydowanie zmienić media_sideload_image (), aby zwracał $ id. W rzeczywistości funkcja ma to pod ręką, patrz źródło tutaj . W rzeczywistości istnieje bilet na to, a oni mają nawet łatki, aby zastosować to do twojego rdzenia w międzyczasie, jeśli chcesz.
Zbudowałem funkcję, aby uzyskać identyfikator z DB, wyszukiwanie według adresu URL.
Możesz uzyskać adres URL (zamiast kodu HTML) z czwartym paramentem ustawionym na
'src'
Codex: media_sideload_image ()źródło
Starsze rozwiązania nie są już potrzebne.
Możesz uzyskać identyfikator z czwartym paramentem ($ return) ustawionym na „id”
https://codex.wordpress.org/Function_Reference/media_sideload_image
źródło
Odpowiedź @ Toma J Nowella jest natychmiastowa. Znalazłem inną alternatywę (przy użyciu różnych funkcji) wyjaśnioną tutaj, ale podoba mi się jeszcze jedna.
W moim przypadku mam tablicę $ postów ze wszystkimi postami, które chcę wstawić oraz osobne $ media (takie same klucze $ nid jak $ posts) z mediami. Mój kod jest tym samym rozwiązaniem, co Tom, ale został ponownie użyty w celu użycia anonimowej funkcji:
W moim przypadku zakładam, że pierwszy element w każdym $ media [$ nid] powinien być wyróżnionym obrazem jego postu.
WordPress powinien zdecydowanie zmienić media_sideload_image (), aby zwracał $ id. W rzeczywistości funkcja ma to pod ręką, patrz źródło tutaj . W rzeczywistości istnieje bilet na to, a oni mają nawet łatki, aby zastosować to do twojego rdzenia w międzyczasie, jeśli chcesz.
źródło
Szukałem rozwiązania i postanowiłem przyjrzeć się kodowi,
media_sideload_image()
który był bardzo prosty. Używa,media_handle_sideload()
co daje nam przywiązanieid
.Zmodyfikowałem go, aby zwracał załącznik
id
zamiast źródła html obrazu, a nawet dodałem sposób, aby wysłać mu nową nazwę pliku.źródło