He programado esto hace cuestión de días, lógicamente lo tienes que adaptar pero si te vale mejor que mejor.
Código PHP:
# Comprueba el tipo de imagen
if(!($_FILES['listaImg'.$i]['type']=="image/jpeg" || $_FILES['listaImg'.$i]['type']=="image/pjpeg" || $_FILES['listaImg'.$i]['type']=="image/gif" || $_FILES['listaImg'.$i]['type']=="image/png")){
echo "<div class='divNew alerta'><span class='alertaTexto alertaTextoRoja'>El tipo de imagen que intentas subir <b>no está permitido</b>. <a href='javascript:history.back(1)'>Atrás</a></span></div>";
exit();
}
# Extensión de los archivos.
if($_FILES['listaImg'.$i]['type']=="image/jpeg" OR $_FILES['listaImg'.$i]['type']=="image/pjpeg"){
$extension = ".jpg";
}
if($_FILES['listaImg'.$i]['type']=="image/gif"){
$extension = ".gif";
}
if($_FILES['listaImg'.$i]['type']=="image/png"){
$extension = ".png";
}
# Nombre de la foto
$nombre_foto = $_FILES['listaImg'.$i]['name'];
# En linux dar permiso a la carpeta UPLOADS.
# De lo contrario no se podrá subir la imagen.
$destino = "../wp-content/plugins/wp-listas/uploads/";
if(move_uploaded_file($_FILES['listaImg'.$i]['tmp_name'], "../wp-content/plugins/wp-listas/upload/".$nombre_foto)){
$URLimagen = $_SERVER['SERVER_NAME']."/wp-content/plugins/wp-listas/upload/".$nombre_foto;
#echo "<img src='../wp-content/plugins/wp-listas/upload/".$nombre_foto."' width='200px' alt='foto' >";
//echo $URLimagen."<br>";
}
NOTA: listaImg es el nombre del input type file para subir la imagen ;). Lo único sería cambiar los IF por el formato en si que deseas. Es preferible usar los headers de los archivos para identificarlos ya que si yo cojo un .exe y lo cambio a .jpg se subiría igual, pero si necesitas algo básico he aquí este ;)