Odrzuć przesyłanie niewłaściwych rozmiarów zdjęć za pomocą programu Media Uploader

12

Pracuję nad bardzo ścisłym ustawieniem dodawania obrazów do pól niestandardowych na ekranie edycji postów. Moim optymalnym scenariuszem byłoby dodanie komunikatu o błędzie niestandardowym, gdy użytkownik próbuje przesłać obraz o niewłaściwym rozmiarze dla tej konkretnej wartości niestandardowej.

Wiem, że mogę to zrobić za pomocą dowolnego niestandardowego programu do przesyłania, ale naprawdę wolałbym to zrobić za pomocą zwykłego programu do przesyłania multimediów. Wiem także o filtrze wp_handle_upload_prefilter, którego już używam do sprawdzania nazw plików i generowania niestandardowych komunikatów o błędach na podstawie ogólnych wymagań. W tej chwili potrzebuję sposobu na użycie niestandardowych wymagań w celu odrzucania przesyłanych plików na podstawie pola, do którego przesyłamy.

Zdaję sobie również sprawę z odróżnienia wyróżnionego obrazu od publikowania obrazów po przesłaniu, ale chciałem wcześniej zapisać rozwiązanie.

To mogłoby wyglądać mniej więcej tak:

wprowadź opis zdjęcia tutaj

Masz jakieś pomysły na temat informowania wp_handle_upload_prefilter(lub podobnego), z którą dziedziną mamy do czynienia?

moraleida
źródło
Interesujące pytanie. Ogólnie rzecz biorąc, myślę, że przekazujesz zmienną niestandardową za pomocą skryptu modalnego niestandardowego programu do przesyłania multimediów, który możesz następnie przekazać w celu dalszego różnicowania po drodze. To może być jedyny sposób, chociaż nie jestem tego w 100% pewien. Znajdziesz potrzebne informacje na ten temat, jeśli będziesz szukać dalej. Następnie wróć i uzupełnij pytanie konkretnymi informacjami lub, jeśli rozwiążesz je samodzielnie, opublikuj swoje rozwiązanie jako odpowiedź. Powodzenia!
Nicolai
Jeśli mówię niestandardowo, mam na myśli niestandardowe użycie programu WordPress Media Uploader, jak na przykład omówione tutaj .
Nicolai
Tak, robiłem już coś takiego w czasach Flash Uploadera. Tym razem wybrałem czystszy sposób, ale może to nie być możliwe. Przyjrzę się temu, dzięki!
moraleida
Słyszę cię, ale tak naprawdę nie sądzę, że to taki zły sposób na zrobienie tego. Poza tym, jak powiedziałem, po prostu nie widzę / nie znam innego sposobu, aby to zrobić, ale może przyjść ktoś z większą wiedzą, aby to wyjaśnić.
Nicolai
1
Czy radzisz sobie z tym? Jeśli nie, ale masz trochę kodu, nad którym pracujesz, opublikuj go. Jestem gotów ustawić nagrodę za pytanie, czy jest w tym więcej podstaw.
Nicolai

Odpowiedzi:

4

W programie obsługi, jeśli ustawisz „błąd”, wyświetli się komunikat o błędzie i anuluje przesyłanie

add_filter( 'wp_handle_upload_prefilter', 'custom_upload_filter' );

function custom_upload_filter( $file ) {
    $image_info   = getimagesize( $file['tmp_name'] );
    $image_width  = $image_info[0];
    $image_height = $image_info[1];

    if ( $image_with !== 800 || $image_height !== 600 ) {
        $file['error'] = __( 'Images must be sized exactly 800 * 600', 'your_textdomain' );
    }
    return $file;
}

Jeśli użytkownik spróbuje przesłać inny rozmiar, wiadomość będzie:

thefile.png has failed to upload due to an error  
Size must be exactly 800 * 600

Pamiętaj, że wp_handle_upload_prefilterjest to bardzo wcześnie proces przetwarzania, więc możesz sprawdzić, czy plik został poprawnie przesłany (z punktu widzenia HTTP) i jest obrazem przed przetestowaniem rozmiaru.

Ref: funtion wp_handle_upload()w pliku podstawowymwp-admin/includes/file.php

YaFred
źródło
Tak, właśnie to robię, aby sprawdzić poprawność nazw plików i właściwości svg. W tej chwili potrzebuję sposobu na przekazanie innego parametru do tego (lub innego) filtra, wskazującego, które pole jest zapełniane przez to przesyłanie, dzięki czemu mogę zastosować różne ograniczenia dla różnych pól. Obecnie jest to wstrzymane. Później zaktualizuję pytanie o moje ustalenia.
moraleida