Я делаю ограничение для загрузки изображения на основе превосходного фрагмента @brasofilo. Короче говоря, это ограничивает пользователя только загрузкой изображения с минимальным размером.
Однако я хочу применить это только тогда, когда пользователь загружает изображение. Я пытался использовать $pagenow
в качестве условного,
global $pagenow; if ($pagenow == 'media-upload.php') add_filter( 'wp_handle_upload_prefilter', 'wpse_28359_block_small_images_upload' );
Но это не сработает. Любая идея здесь?
Определить, действительно ли приложение действительно является признаком изображения , легко:
get_post_thumbnail_id( get_post() );
которая является удобной функцией вокруг
get_post_meta( get_post()->ID, '_thumbnail_id', true );
Это немного сложнее, если вы не знаете ничего, кроме имени файла или Url.
add_filter( 'wp_handle_upload_prefilter', function( $file ) { $url = wp_get_attachment_image_src( get_post_thumbnail_id( get_post() ), 'post-thumbnail' ); // Output possible errors if ( false !== strpos( $url, $file ) ) { $file['error'] = 'Sorry, but we only allow featured images'; } return $file; } );
Как вы можете видеть, я сравниваю только текущую строку с сообщениями с изображениями URl. Обратите внимание, что я не знаю, будет ли это работать, оно не проверено, а параметр wp_handle_upload_prefilter
может быть слишком ранним.
Другим вариантом может быть использование последнего фильтра внутри _wp_handle_upload()
:
apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'wp_handle_sideload' === $action ? 'sideload' : 'upload' );
который также обрабатывает боковые нагрузки.
В теории я предполагаю, что еще слишком рано проверять, является ли показанное изображение фактически отображаемым изображением до его установки. Возможно, вы сможете вернуть загрузку после ее завершения (удалить файл, сбросить метаданные сообщения), но это далеко не изящно.
Сама мета-поле регистрируется с помощью add_meta_box()
а обратный вызов в поле – post_thumbnail_meta_box
, который вызывает _wp_post_thumbnail_html()
для визуализации содержимого. Когда вы посмотрите туда, вы увидите, что на самом деле есть скрытое поле:
$content .= '<input type="hidden" id="_thumbnail_id" name="_thumbnail_id" value="' . esc_attr( $thumbnail_id ? $thumbnail_id : '-1' ) . '" />';
Теперь name
_thumbnail_id
, которое вы можете получить с помощью filter_input()
(good) или с $_POST['_thumbnail_id']
(плохой) внутри обратного вызова, например wp_handle_upload_prefilter
чтобы определить, действительно ли это было изображение:
$featID = filter_input( INPUT_POST, '_thumbnail_id', … filters … );
Добавьте ниже код в файл functions.php текущей темы, и он ограничит минимальные размеры изображения:
add_filter('wp_handle_upload_prefilter','tc_handle_upload_prefilter'); function tc_handle_upload_prefilter($file) { $img=getimagesize($file['tmp_name']); $minimum = array('width' => '250', 'height' => '200'); $width= $img[0]; $height =$img[1]; if ($width < $minimum['width'] ) return array("error"=>"Image dimensions are too small. Minimum width is {$minimum['width']}px. Uploaded image width is $width px"); elseif ($height < $minimum['height']) return array("error"=>"Image dimensions are too small. Minimum height is {$minimum['height']}px. Uploaded image height is $height px"); else return $file; }
Затем просто измените номера минимальных размеров, которые вы хотите (в моем примере 250 и 200)