строго говоря, прописать типы файлов проблемы нет через саму админку, такая функция заложена. Просто беда в том, что например дизайнерских программ десятки, а типов файлов сотни. Даже навскидку сложно вспомнить, и создаваться список будет годами проб и ошибок и нахождения заковыристых клиентов. И проще просто убрать проверку на список чтобы принимать любой вообще файл. За такую доработку подозреваю спасибо скажут десятки вебмастеров.
И она (сверка со списком) гдето в этом файле, да
в этих вот строках:
/* Validation + upload handling filter */
add_filter( 'wpcf7_validate_file', 'wpcf7_file_validation_filter', 10, 2 );
add_filter( 'wpcf7_validate_file*', 'wpcf7_file_validation_filter', 10, 2 );
function wpcf7_file_validation_filter( $result, $tag ) {
$tag = new WPCF7_Shortcode( $tag );
$name = $tag->name;
$file = isset( $_FILES[$name] ) ? $_FILES[$name] : null;
if ( $file['error'] && UPLOAD_ERR_NO_FILE != $file['error'] ) {
$result['valid'] = false;
$result['reason'][$name] = wpcf7_get_message( 'upload_failed_php_error' );
return $result;
}
if ( empty( $file['tmp_name'] ) && $tag->is_required() ) {
$result['valid'] = false;
$result['reason'][$name] = wpcf7_get_message( 'invalid_required' );
return $result;
}
if ( ! is_uploaded_file( $file['tmp_name'] ) )
return $result;
$allowed_file_types = array();
if ( $file_types_a = $tag->get_option( 'filetypes' ) ) {
foreach ( $file_types_a as $file_types ) {
$file_types = explode( '|', $file_types );
foreach ( $file_types as $file_type ) {
$file_type = trim( $file_type, '.' );
$file_type = str_replace( array( '.', '+', '*', '?' ),
array( '\.', '\+', '\*', '\?' ), $file_type );
$allowed_file_types[] = $file_type;
}
}
}
$allowed_file_types = array_unique( $allowed_file_types );
$file_type_pattern = implode( '|', $allowed_file_types );
$allowed_size = 1048576; // default size 1 MB
if ( $file_size_a = $tag->get_option( 'limit' ) ) {
$limit_pattern = '/^([1-9][0-9]*)([kKmM]?[bB])?$/';
foreach ( $file_size_a as $file_size ) {
if ( preg_match( $limit_pattern, $file_size, $matches ) ) {
$allowed_size = (int) $matches[1];
if ( ! empty( $matches[2] ) ) {
$kbmb = strtolower( $matches[2] );
if ( 'kb' == $kbmb )
$allowed_size *= 1024;
elseif ( 'mb' == $kbmb )
$allowed_size *= 1024 * 1024;
}
break;
}
}
}
/* File type validation */