Unterscheiden Sie das ausgewählte Bild von den Post-Bildern beim Hochladen

Ich möchte das vorgestellte Bild von Post-Bildern unterscheiden.

Der Plan sieht vor, dem ausgewählten Bild mehrere Größen zu geben, aber die Bilder, die mit dem Post verbunden sind oder mit ihm verbunden sind, benötigen nur die Standardgrößen.

Ich weiß, dass ich intermediate_image_sizes kann, um zu filtern, welche benutzerdefinierten Post-Typen welchen Bildgrößen zugewiesen werden:

 /** Don't Make Extra Sizes **/ function post_type_sizes( $image_sizes ){ $post_type_size_array = array('icon', 'med-thumb', 'large', 'full'); $post_image_sizes = array('thumbnail', 'medium', 'large', 'full'); if( isset($_REQUEST['post_id']) && 'cpt_test' === get_post_type($_REQUEST['post_id']) ) return $post_type_size_array; else return $post_image_sizes; return $image_sizes; } add_filter('intermediate_image_sizes', 'post_type_sizes', 999 ); 

Aber ich möchte dem Featured Image nur mehrere benutzerdefinierte Größen geben und jeden Post, der hochgeladen wird, in den TinyMCE-Standardgrößen belassen (Miniaturansicht, mittel, groß, voll).

Solutions Collecting From Web of "Unterscheiden Sie das ausgewählte Bild von den Post-Bildern beim Hochladen"

Sie können dies tun, indem Sie den Metawert für _thumbnail_id .

 add_filter( 'update_post_metadata', 'generate_featured_image_sizes', 10, 5 ); add_filter( 'add_post_metadata', 'generate_featured_image_sizes', 10, 5 ); function generate_featured_image_sizes( $check, $object_id, $meta_key, $meta_value, $unique_or_prev ) { if ( $meta_key == '_thumbnail_id' ) { // regenerate previous featured image thumbs if it exists if ( false !== ( $prev_thumb_id = get_post_meta( $object_id, '_thumbnail_id', true ) ) ) { $prev_new_metadata = wp_generate_attachment_metadata( $prev_thumb_id, get_attached_file( $prev_thumb_id ) ); if ( ! is_wp_error( $prev_new_metadata ) ) wp_update_attachment_metadata( $prev_thumb_id, $prev_new_metadata ); } // remove all normal image sizes before we add our filter cleanup_attachment_images( $meta_value ); // filter image sizes for featured add_filter( 'intermediate_image_sizes', 'featured_image_sizes', 9999 ); // regenerate thumbnails for featured $new_metadata = wp_generate_attachment_metadata( $meta_value, get_attached_file( $meta_value ) ); if ( ! is_wp_error( $new_metadata ) ) wp_update_attachment_metadata( $meta_value, $new_metadata ); // remove featured sizes from previous featured image if ( isset( $prev_thumb_id ) && $prev_thumb_id ) cleanup_attachment_images( $prev_thumb_id ); // tidy up remove_filter( 'intermediate_image_sizes', 'featured_image_sizes', 9999 ); } return $check; } function featured_image_sizes( $sizes ) { return array( 'large', 'featured', 'slider' ); } function cleanup_attachment_images( $attachment_id ) { $uploadpath = wp_upload_dir(); $intermediate_sizes = array(); foreach ( get_intermediate_image_sizes() as $size ) { if ( $intermediate = image_get_intermediate_size( $attachment_id, $size ) ) $intermediate_sizes[] = $intermediate; } // remove intermediate and backup images if there are any foreach ( $intermediate_sizes as $intermediate ) { /** This filter is documented in wp-admin/custom-header.php */ $intermediate_file = apply_filters( 'wp_delete_file', $intermediate[ 'path' ] ); @ unlink( path_join( $uploadpath[ 'basedir' ], $intermediate_file ) ); } } 

Bei der Neuerstellung der Thumbnails werden nur die Anhangsmetadaten generiert und aktualisiert, sodass Sie immer dann den gewünschten Effekt erhalten, wenn Sie das geänderte Bild ändern.

Dies funktioniert beim Upload, aber auch wenn das vorgestellte Bild geändert wird. Darüber hinaus wird es Daumen für das alte Thumbnail regenerieren, so dass es wie ein normales Bild mit den normalen Größen wieder ist.

Der Grund für die Verwendung der add_post_metadata und update_post_metadata besteht darin, dass wir Zugriff auf den aktuellen Wert haben, bevor er in der database aktualisiert wird.

HINWEIS Es gibt keinen wirklichen Unterschied zwischen dem Add Media Popup für das vorgestellte Bild oder dem Editor, diese Links öffnen das Popup nur in einem anderen Zustand, so dass es nicht einfach ist, zu bestimmen, welcher Status angefordert wurde (vordefiniertes Bild oder Editor), wenn Bilder hochgeladen werden , daher der Ansatz, den ich oben gezeigt habe.

UPDATE Ich habe eine function hinzugefügt, die Sie aufrufen können, um generierte Miniaturbilder für einen Anhang zu löschen. Sie würden dies aufrufen, bevor Sie neue Anhangsmetadaten generieren. Sie können sogar die Bildgrößen filtern, die entfernt werden, oder die function ändern, damit Sie sie als Argument übergeben können.

Sie können dies auch versuchen

 function post_type_sizes( $image_sizes ){ $feature_image_sizes = array('thumbnail'); // checking for feature image uploading or not if( isset($_REQUEST['post_id']) && 'post' === get_post_type($_REQUEST['post_id']) && get_post_meta( $_REQUEST['post_id'], 'feature_image_uploading', true ) ){ update_post_meta( $_POST['post_id'],'feature_image_uploading', false ); return $feature_image_sizes; } return $image_sizes; } add_filter('intermediate_image_sizes', 'post_type_sizes', 999 ); add_action('admin_footer', 'monksinc_notify_feature_image_event', 9999 ); function monksinc_notify_feature_image_event(){ global $pagenow, $post; if( 'post.php' !== $pagenow && 'post' !== get_post_type( $post->ID ) ) return; ?>  < ?php } add_action( 'wp_ajax_set_post_thumbnail_notify', 'set_post_thumbnail_notify_callback' ); function set_post_thumbnail_notify_callback(){ $result = array( 'status'=> 'fail' ); if( isset( $_POST ) && 'set_post_thumbnail_notify' === $_POST['action'] && '' !== $_POST['post_id'] ){ update_post_meta( $_POST['post_id'],'feature_image_uploading', true ); $result = array( 'status'=> 'success' ); } echo json_encode($result); die(); } 
  1. In diesem Skript füge ich einen Ajax-Aufruf zum Feature-Bild-Link hinzu, der mir mitteilt, dass der Nutzer ein vordefiniertes Bild hochlädt
  2. Ich setze ein Post-Meta, wenn der Benutzer das vorgestellte Bild hochlädt und dieses Post-Meta für die bedingte Überprüfung verwendet, um bestimmte Größen für das vorgestellte Bild zu generieren