Dimensions minimales requises pour l'image sélectionnée?

13

Je crée un site Web de baseball avec plusieurs auteurs. Par le passé, si vous connaissez personnellement quelqu'un personnellement, cela ne signifie pas qu'il va suivre ou même lire vos instructions.

Cela étant dit, j'aimerais demander à toute image qu'un auteur décide d'utiliser "Utiliser comme image sélectionnée" d'au moins 640 pixels de large et d'au moins 360 pixels de haut.

J'ai demandé à chaque publication d'avoir une image sélectionnée à l'aide du plug-in WyPiekacz ; le message ne sera pas publié sans une image en vedette. J'ai bloqué la possibilité pour un auteur de créer un lien direct avec un autre site en supprimer l'onglet "De l'URL" dans Ajouter un média à l'aide du code de Bainternet.

Maintenant, je dois exiger que toute image utilisée en tant qu'image sélectionnée soit d'au moins 640 pixels par 360 pixels. Je ne suis pas un moyen de coder, mais j'ai joué avec et essayé d'utiliser le code de Maor Barazany comme point de départ, mais en vain. Son code impose des dimensions minimales pour toute image téléchargée .

    
posée Travis Pflanz 26.03.2012 - 23:15

6 réponses

2

Bien si vous utilisez le plugin WyPiekacz; comme vous l'avez dit pour vérifier que l'image sélectionnée est téléchargée, vous pouvez la modifier légèrement pour vérifier que s'il existe une image sélectionnée, le nombre de dimesions minimal requis est respecté.

$has_thumbnail = false;
            if ( ( $post_id > 0 ) && function_exists( 'has_post_thumbnail' ) ) {
                $has_thumbnail = has_post_thumbnail( $post_id );
            }

            $has_thumbnail = apply_filters( 'wypiekacz_check_thumbnail', $has_thumbnail, $post_id, $post_data );

            if ( !$has_thumbnail ) {
                $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) is required.', 'wypiekacz') );
            }

Vous pouvez modifier le code ci-dessus dans wypiekacz.php en,

$has_thumbnail_proper_dimension = false;
        if ( ( $post_id > 0 ) && function_exists( 'has_post_thumbnail' ) ) {
            $has_thumbnail = has_post_thumbnail( $post_id );
              list($url, $width, $height) = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), "Full");
                echo $imgsrc[0];
              if($width>=640 and $height>=360){
                  $has_thumbnail_proper_dimension=true;
               }
        }

        $has_thumbnail = apply_filters( 'wypiekacz_check_thumbnail', $has_thumbnail, $post_id, $post_data );

        if ( !$has_thumbnail ) {
            $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) is required.', 'wypiekacz') );
        }
        if ( !$has_thumbnail_proper_dimension ) {
            $this->errors[] = array( 'post_thumbnail', __('Post thumbnail (Featured image) should be atleast 640x360.', 'wypiekacz') );
        }

Eh bien, je ne comprends pas ce que vous entendez par "Onglet Bibliothèque de médias".

    
réponse donnée Rajeev Vyas 12.04.2012 - 17:17
2

J'ai vérifié le noyau et apparemment, il y a peu de marge de manœuvre.

/wp-admin/includes/media.php est l'endroit où les onglets Ajouter un média sont générés

La fonction get_media_item de la ligne 1034 est celle qui affiche le tableau des pièces jointes / supports. Je ne vois aucun filtre disponible ni les fonctions précédentes appelant celui-ci.

Quelques références et exemples de code autour du problème.

Je suppose qu’une solution alternative consisterait à modifier le titre des images téléchargées et à en ajouter les dimensions. Je ne suis pas sûr de changer le post_title d'un fichier téléchargé, mais il est possible de renommer le fichier lui-même avec ces deux filtres: nom_fichier_anitize et wp_handle_upload_prefilter

    
réponse donnée brasofilo 30.03.2012 - 21:18
1

Pas une réponse complète et pas pour la prime, mais simplement une preuve que le concept de base fonctionne:

function wpse_attachment_dimension_check( $form_fields, $post ) {

    $meta = wp_get_attachment_metadata($post->ID);

    if ( !empty[$meta['width']] )
        if ( $meta['width'] <= 999 or $meta['height'] <= 349 ) 
        {   
            echo '<p class="error">Image dimensions ...bla</p>';
            exit;
        }
        else
        {
             // Return all form fields
             return $form_fields;
        }
}

add_filter( 'attachment_fields_to_edit', 'wpse_attachment_dimension_check', 10, 2 );

Seulement un 60secondsSnippet et un gros problème: cela se déclenche à chaque téléchargement, et pas seulement si quelqu'un est prêt à ajouter une image sélectionnée, car nous n'avons pas le moyen d'obtenir le contexte du programme de téléchargement d'image. Il existe quelques moyens de contourner ce problème, essentiellement avec une manipulation de js.

Je devrais travailler maintenant et je n’ai pas le temps d’expérimenter. Mais je voulais aider autant que je pouvais, et c’est peut-être un point de départ pour les autres.

acclamations

    
réponse donnée ungestaltbar 12.04.2012 - 09:56
1

Ce n’est pas la réponse la plus élégante ... mais ça marche! Le plugin 'WyPiekacz', bien que cool, n'a pas été mis à jour depuis trois ans.

add_action('transition_post_status', 'check_featured_image_size_after_save', 10, 3);

function check_featured_image_size_after_save($new_status, $old_status, $post){
  $run_on_statuses = array('publish', 'pending', 'future');
  if(!in_array($new_status, $run_on_statuses))
    return;

  $post_id = $post->ID;
  if ( wp_is_post_revision( $post_id ) )
    return; //not sure about this.. but apparently save is called twice when this happens

  $image_data = wp_get_attachment_image_src( get_post_thumbnail_id( $post_id ), "Full" );
  if(!$image_data)
    return; //separate message if no image at all. (I use a plugin for this)

  $image_width = $image_data[1];
  $image_height = $image_data[2];

  // replace with your requirements.
  $min_width = 900;
  $min_height = 400;
  if($image_width < $min_width || $image_height < $min_height){
    // Being safe, honestly $old_status shouldn't be in $run_on_statuses... it wouldn't save the first time!
    $reverted_status = in_array($old_status, $run_on_statuses) ? 'draft' : $old_status;
    wp_update_post(array(
      'ID' => $post_id,
      'post_status' => $reverted_status,
    ));
    $back_link = admin_url("post.php?post=$post_id&action=edit");
    wp_die("Featured Image not large enough, must be at least ${min_width}x$min_height. Reverting status to '$reverted_status'.<br><br><a href='$back_link'>Go Back</a>");
  }
}

La solution la plus élégante offrant la meilleure expérience utilisateur aurait recours à JavaScript pour gérer cela à la fois pour l'édition rapide et la page de post-édition. Ensuite, par chance, j'ajouterais quelque chose au filtre update_post_metadata (qui fonctionne totalement pour empêcher l'image sélectionnée, mais ne donne pas d'avertissement puisqu'il est exécuté avec AJAX).

Les notifications de l'administrateur n'apparaîtront pas à cause des redirections WordPress et ne s'afficheraient même pas dans une édition rapide (ma méthode affiche un avertissement sur l'édition rapide bien qu'elle ne soit pas stylisée).

    
réponse donnée Ryan Taylor 19.02.2015 - 21:31
0

Voici un moyen de s’assurer que la vignette est correctement dimensionnée avant de l’afficher.

Créez d'abord cette fonction d'assistance:

function has_post_thumbnail_of_size($width, $height) {
    $thumbnail_id = get_post_thumbnail_id();
    if( $thumbnail_id ) {
        $thumbnail_metadata = wp_get_attachment_metadata( $thumbnail_id );
        if( $thumbnail_metadata['height'] >= $height && $thumbnail_metadata['width'] >= $width ) {
            return true;
        }
    }
    return false;
}

Ensuite, vous pouvez vérifier avant d'afficher la miniature de publication:

if( has_post_thumbnail_of_size(640, 360) ) {
    the_post_thumbnail();
}
    
réponse donnée Sam Margulies 11.04.2012 - 21:07
0

Cela fera ce qu’il faut:)

//Adding script to deligate Thumbnail Size
if ( function_exists( 'add_theme_support' ) ) {
  add_theme_support( 'post-thumbnails' );
    set_post_thumbnail_size( 960, 276, true ); // default Post Thumbnail dimensions   
}
//Set different Thumbnail Sizes for Later
if ( function_exists( 'add_image_size' ) ) { 
  add_image_size( 'large-thumb', 960, 276, true ); //(cropped)  
  add_image_size( 'medium-thumb', 605, 174, true ); //(cropped) 
  add_image_size( 'small-thumb', 288, 83, true ); //(cropped) 
  add_image_size( 'small-square', 100, 100, true ); //(cropped) 
}

<?php if ( has_post_thumbnail() ) {
      global $post; //I usually define this in the function that outputs this, fyi
      echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
      echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));
      echo '</a>'; 
      } else {

      $thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id'));
      foreach ($thumbnails as $thumbnail) {
      echo '<a href="' . get_permalink( $post->ID ) . '" title="' . esc_attr( $post->post_title ) . '">';
      echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));
      echo '</a>';
      }           
    }   
    ?>

Il utilise get_the_post_thumbnail, qui peut également vous aider à ne pas créer un tas de code fn que WordPress peut déjà gérer pour vous, rien qu’une idée.

Ceci utilise $thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id')); pour récupérer un aléatoire si aucun n’est présent, cela peut vous aider à avancer.

Ce bit echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) )); remarque que le 'small-thumb' est mis en correspondance avec ceux de la commande add_image_size fn que nous avons rassemblés sur quelques lignes. Donc, si vous aviez add_image_size( 'small-square', 100, 100, true ); , vous pouvez également appeler alternativement 'small-square' .

Cheers

    
réponse donnée David 12.04.2012 - 00:21

Lire d'autres questions sur les étiquettes