画像のアップロードを1つに制限し、アップロードするオーディオ、ビデオ、その他のドキュメントファイルタイプを無効にします


20

誰かが新しい投稿を追加する方法のコツを知っています:

  1. オーディオ、ビデオ、その他のファイルタイプのアップロードを無効にします。

  2. 画像(jpg、png、gif)のアップロードのみを受け入れます。

  3. 各投稿のアップロードを1つの画像(1つ以下)に制限します。

前もって感謝します。


1
Flashアップローダーを変更して、1つのファイルのみを許可することもできます。これは、マイクが提供したソリューションと連動します。
ヤンファブリ

回答:


25

私はそれが不可能であるか、少なくとも簡単ではないという考えをあきらめようとしていました。そして、私はwp_handle_upload_prefilterあなたが求めていたものを正確に提供するフィルターにつまずきました!コードは次のとおりです。

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;
}

そして、それが実際にどのように見えるかを示すスクリーンショットです:

画像ファイル以外の複数のアップロードを無効にするコードを含むWordPressアップロードダイアログのスクリーンショット

投稿ごとの複数の画像アップロードを無効にするコードを含むWordPressアップロードダイアログのスクリーンショット


マイクありがとう。フラッシュ以外のアップロードプロセスで動作するようですが、フラッシュバージョンを使用すると次のように表示されます。
ホセパブロオロスコマリン

@JoséPablo OrozcoMarín-エラーを見つけてくれてありがとう。私は問題を発見し、Flashアップローダーで動作すると信じている新しいバージョンのコードを投稿したと思います。お知らせ下さい!
-MikeSchinkel

@ホセ・パブロ・オロスコ・マリン-素晴らしい。お役に立てて嬉しいです。
MikeSchinkel

この行はどこに追加する必要がありますか?また、tu wp 3.01以降と互換性がありますか?

1
ちょっとマイク。この答えはかなり古いです。ワードプレスの新しいバージョンを検討するより良いアプローチはありますか?
シシル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.