Wie kann ich überprüfen, ob ein Nutzer ein Bild als vorgestellten Bild hochlädt / einstellt?

Ich mache eine Einschränkung für das Hochladen von Bildern basierend auf @brasofilo Excellent Snippet . Kurz gesagt, es beschränkt den Benutzer darauf, nur Bilder mit minimalen Abmessungen hochzuladen.

Ich möchte dies jedoch nur anwenden, wenn der Benutzer ein vordefiniertes Bild hochlädt. Ich habe versucht, $pagenow als Bedingung zu verwenden,

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

Aber es funktioniert nicht. Irgendeine Idee hier?

Solutions Collecting From Web of "Wie kann ich überprüfen, ob ein Nutzer ein Bild als vorgestellten Bild hochlädt / einstellt?"

Das Bestimmen, ob ein Anhang tatsächlich ein vordefiniertes Bild ist, ist einfach:

 get_post_thumbnail_id( get_post() ); 

Das ist eine Komfortfunktion um

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

Es ist etwas komplizierter, wenn Sie nichts als den Dateinamen oder die URL kennen.

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

Wie Sie sehen können, vergleiche ich nur den aktuellen Dateistring mit einem Posts-Featurebild URl. Beachten Sie, dass ich nicht weiß, ob das funktioniert, es nicht getestet wird und der wp_handle_upload_prefilter möglicherweise zu früh ist.

Eine andere Option könnte darin bestehen, den letzten Filter in _wp_handle_upload() :

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

die auch Sideload verarbeitet.

Theoretisch gehe ich davon aus, dass es zu früh ist, um zu überprüfen, ob das vorgestellte Bild tatsächlich das vorgestellte Bild ist. Möglicherweise können Sie den Upload nach Abschluss des Vorgangs rückgängig machen (Datei löschen, Post-Metadaten zurücksetzen), aber das ist alles andere als elegant.

Die Meta-Box selbst ist mit add_meta_box() registriert und der Box-Callback ist post_thumbnail_meta_box , der _wp_post_thumbnail_html() , um den Inhalt zu rendern. Wenn Sie hineinschauen, werden Sie sehen, dass es tatsächlich ein verstecktes Feld gibt:

 $content .= ''; 

Nun lautet der name _thumbnail_id , den Sie mit filter_input() (gut) oder mit $_POST['_thumbnail_id'] (schlecht) innerhalb eines Callbacks wie wp_handle_upload_prefilter um festzustellen, ob es tatsächlich ein wp_handle_upload_prefilter Bild war:

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

Fügen Sie der functions.php-Datei Ihres aktuellen Themas den folgenden Code hinzu, und begrenzen Sie die minimalen Bilddimensionen:

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

Dann ändere einfach die Anzahl der gewünschten Mindestabmessungen (in meinem Beispiel sind es 250 und 200)