Czy mogę w jakiś sposób pobrać adres URL obrazu i znaleźć załącznik lub identyfikator tego obrazu w bazie danych?
Oto sytuacja:
Jestem w pętli przeglądając wszystkie tagi „img”, które są otoczone przez tagi „a” w treści mojego postu. jeśli atrybut src znacznika „img” nie pasuje do atrybutu href zewnętrznego znacznika „a”, to chcę zastąpić znacznik „img”. Robiąc to, jeśli „img”, który ma zostać usunięty, znajduje się w galerii, chcę usunąć ten post, a następnie umieścić moje zastępcze „img” na jego miejscu. Próbowałem użyć funkcji takiej jak ta:
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;
}
To najwyraźniej nie jest słuszne, ponieważ przewodnik nie jest ironicznie wyjątkowy na całym świecie. Przesłałem (wcześniej w tym samym skrypcie) plik o tej samej nazwie (dlaczego? Bo to była wyższa rozdzielczość i próbuję zastąpić wersje tego samego obrazu w niskiej rozdzielczości) i chociaż wordpress zapisze obraz pod inną nazwą w katalog, przewodniki były ustawione tak samo. (prawdopodobnie błąd).
Czy mogę zastosować inną technikę?
źródło
Odpowiedzi:
Znacząco ulepszona funkcja opracowana dla wtyczek obciążających obrazy:
źródło
_wp_attached_file
i_wp_attachment_metadata
?Wszystkie te złożone funkcje można sprowadzić do jednej prostej funkcji:
załącznik_url_to_postid ()
Musisz tylko przeanalizować adres URL obrazu, aby pobrać identyfikator załącznika:
To wszystko czego potrzebujesz.
źródło
Zmodyfikowałem kod Rarsta, aby umożliwić dopasowanie tylko nazwy pliku zamiast pełnej ścieżki. Jest to przydatne, jeśli masz zamiar załadować obraz na bok, jeśli nie istnieje. Obecnie działa to tylko wtedy, gdy nazwy plików są unikalne, ale później dodam kontrolę skrótu, aby pomóc w przypadku obrazów o tej samej nazwie pliku.
źródło
Ok znalazłem odpowiedź, której nikt nie ma w sieci, której szukałem od kilku dni. Przechowywać w kopalni to działa tylko wtedy, gdy motyw lub wtyczka jest za pomocą
WP_Customize_Image_Control()
jeśli używasz zwróci identyfikator, a nie URL.WP_Customize_Media_Control()
get_theme_mod()
Do mojego rozwiązania korzystałem z nowszej wersji
WP_Customize_Image_Control()
Wiele postów na forach zawiera te,
get_attachment_id()
które już nie działają. użyłemattachment_url_to_postid()
Oto jak mogłem to zrobić. Mam nadzieję, że to pomoże komuś tam
Narzut
źródło
Oto alternatywne rozwiązanie:
Od WP 4.0 wprowadzono funkcję,
attachment_url_to_postid()
która zachowuje się podobnie do twojejfind_image_post_id()
Sprawdź ten adres URL w celach informacyjnych.
źródło