Como verificar se o usuário está carregando / configurando uma imagem como uma imagem em destaque?

Estou fazendo uma limitação para o upload de imagens com base no trecho excelente @brasofilo. Em suma, limita o usuário a apenas carregar a imagem com uma dimensão mínima.

No entanto, eu quero aplicar isso somente quando o usuário está carregando uma imagem em destaque. Eu tentei usar $pagenow como um condicional,

 global $pagenow; if ($pagenow == 'media-upload.php') add_filter( 'wp_handle_upload_prefilter', 'wpse_28359_block_small_images_upload' ); 

Mas não funciona. Alguma idéia aqui?

Solutions Collecting From Web of "Como verificar se o usuário está carregando / configurando uma imagem como uma imagem em destaque?"

Determinar se um anexo realmente é uma imagem em destaque é fácil:

 get_post_thumbnail_id( get_post() ); 

que é uma function de conveniência ao redor

 get_post_meta( get_post()->ID, '_thumbnail_id', true ); 

É um pouco mais complicado se você não souber nada do que o nome do arquivo ou 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; } ); 

Como você pode ver, eu só comparo a seqüência de arquivo atual com uma publicação de imagens apresentadas URl. Note que não sei se isso vai funcionar, não é testado e o wp_handle_upload_prefilter pode ser muito cedo.

Outra opção pode ser usar o último filtro dentro de _wp_handle_upload() :

 apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'wp_handle_sideload' === $action ? 'sideload' : 'upload' ); 

que também lida com a mão lateral.

Em teoria, eu suponho que é muito cedo para verificar se a imagem em destaque é realmente a imagem em destaque antes que ela seja definida. Você poderá reverter o upload assim que finalizado (apagar o arquivo, redefinir os metadados do post), mas isso está longe de ser elegante.

A checkbox de meta está registrada com add_meta_box() e a checkbox de retorno de chamada é post_thumbnail_meta_box , que chama _wp_post_thumbnail_html() para renderizar o conteúdo. Quando você olha para lá, você verá que na verdade existe um campo oculto:

 $content .= ''; 

Agora, o name é _thumbnail_id , que você deve conseguir com filter_input() (bom) ou com $_POST['_thumbnail_id'] (ruim) dentro de um retorno de chamada como wp_handle_upload_prefilter para determinar se ele realmente era uma imagem em destaque:

 $featID = filter_input( INPUT_POST, '_thumbnail_id', … filters … ); 

Adicione o código abaixo ao arquivo functions.php do seu tema atual e limitará as dimensões mínimas da imagem:

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

Em seguida, basta alterar os números das dimensões mínimas que deseja (no meu exemplo é 250 e 200)