Ogranicz przesyłanie obrazu do jednego i wyłącz przesyłanie plików audio, wideo i innych typów dokumentów

20

Ktoś zna sztuczkę w Dodaj nowy post do:

  1. Wyłącz przesyłanie plików audio, wideo i innych typów plików.

  2. Akceptuj tylko przesyłanie obrazu (jpg, png, gif).

  3. Ogranicz przesyłanie każdego posta do tylko jednego obrazu (nie więcej niż jednego).

Z góry dziękuję.

José Pablo Orozco Marín
źródło
1
Możesz także zmodyfikować program do przesyłania Flash, aby zezwolił tylko na jeden plik . Działa to razem z rozwiązaniem, które podał Mike.
Jan Fabry

Odpowiedzi:

25

Już miałam przestać myśleć, że to nie jest możliwe, a przynajmniej łatwe, a potem natknąłem się na wp_handle_upload_prefilterfiltr, który daje dokładnie to, o co prosiłeś! Oto kod:

add_filter('wp_handle_upload_prefilter', 'yoursite_wp_handle_upload_prefilter');
function yoursite_wp_handle_upload_prefilter($file) {
  // This bit is for the flash uploader
  if ($file['type']=='application/octet-stream' && isset($file['tmp_name'])) {
    $file_size = getimagesize($file['tmp_name']);
    if (isset($file_size['error']) && $file_size['error']!=0) {
      $file['error'] = "Unexpected Error: {$file_size['error']}";
      return $file;
    } else {
      $file['type'] = $file_size['mime'];
    }
  }
  list($category,$type) = explode('/',$file['type']);
  if ('image'!=$category || !in_array($type,array('jpg','jpeg','gif','png'))) {
    $file['error'] = "Sorry, you can only upload a .GIF, a .JPG, or a .PNG image file.";
  } else if ($post_id = (isset($_REQUEST['post_id']) ? $_REQUEST['post_id'] : false)) {
    if (count(get_posts("post_type=attachment&post_parent={$post_id}"))>0)
      $file['error'] = "Sorry, you cannot upload more than one (1) image.";
  }
  return $file;
}

A oto kilka zrzutów ekranu pokazujących, jak to wygląda w akcji:

Zrzut ekranu okna dialogowego przesyłania WordPress z kodem, aby wyłączyć wielokrotne przesyłanie czegokolwiek poza plikami obrazów

Zrzut ekranu okna dialogowego przesyłania WordPress z kodem, aby wyłączyć przesyłanie wielu obrazów na post

MikeSchinkel
źródło
Dzięki Mike. Wygląda na to, że działa w trybie przesyłania innym niż flash, ale użycie wersji flash pokazuje: ... Przepraszamy, możesz przesłać tylko plik obrazu .GIF, .JPG lub .PNG.
José Pablo Orozco Marín
@ José Pablo Orozco Marín - Dziękujemy za znalezienie mojego błędu. Myślę, że znalazłem problem i opublikowałem nowszą wersję kodu, który moim zdaniem działa teraz dla programu ładującego flash. Daj mi znać!
MikeSchinkel,
@ José Pablo Orozco Marín - Awesome. Cieszę się, że mogłem pomóc.
MikeSchinkel,
gdzie powinienem dodać ten wiersz - i czy jest on zgodny tu wp 3.01 i późniejszy?
1
hej mike. Ta odpowiedź jest dość stara. Czy istnieje lepsze podejście do nowej wersji wordpress?
Sisir