wake-up-neo.net

Mindestabmessungen für empfohlenes Bild erforderlich?

Ich erstelle eine Baseball-Website mit mehreren Autoren. Aus der Vergangenheit, egal wie gut Sie jemanden persönlich kennen, bedeutet dies nicht, dass er Ihren Anweisungen folgt oder sie sogar liest.

Davon abgesehen möchte ich verlangen, dass jedes Bild, das ein Autor als "Verwendetes Bild" auswählt, mindestens 640 Pixel breit und mindestens 360 Pixel groß ist.

Ich habe verlangt, dass jeder Beitrag ein Featured Image mit dem WyPiekacz-Plugin hat. Der Beitrag wird nicht ohne ein ausgewähltes Bild veröffentlicht. Ich habe die Möglichkeit für einen Autor blockiert, einen Hotlink zu einer anderen Site zu erstellen, indem ich die Registerkarte "Von URL" unter "Medien hinzufügen" entferne den Bainternet-Code verwende.

Jetzt muss ich verlangen, dass jedes Bild, das als das vorgestellte Bild verwendet wird, mindestens 640 x 360 Pixel groß ist. Ich bin auf keinen Fall ein Programmierer, aber ich habe mit dem Code von Maor Barazany herumgespielt und versucht, ihn als Ausgangspunkt zu verwenden, aber ohne Erfolg. Sein Code erzwingt Mindestabmessungen für jedes Bild, das hochgeladen wird .

14
Travis Pflanz

gut, wenn Sie das WyPiekacz-Plugin verwenden; Wie Sie sagten, um zu überprüfen, ob das ausgewählte Bild hochgeladen wurde, können Sie es ein wenig optimieren, um zu überprüfen, ob das ausgewählte Bild die erforderlichen Mindestmaße aufweist.

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

Sie können den obigen Code in wypiekacz.php ändern,

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

nun, ich verstehe nicht, was Sie mit "Media Library Tab" meinen.

2
Rajeev Vyas

Ich habe den Kern überprüft und anscheinend gibt es wenig Spielraum.

In /wp-admin/includes/media.php werden Registerkarten zum Hinzufügen von Medien generiert

Die Funktion get_media_item in Zeile 1034 ist diejenige, die die Anhangs-/Medientabelle darstellt. Ich kann keinen darin verfügbaren Filter oder die vorherigen Funktionen, die diesen aufrufen, sehen.

Einige Verweise und Codebeispiele rund um das Problem.

Ich denke, eine alternative Lösung wäre, den Titel der hochgeladenen Bilder zu ändern und seine Abmessungen anzufügen. Ich bin mir nicht sicher, ob ich den post_title einer hochgeladenen Datei ändern soll, aber das Umbenennen der Datei selbst kann mit diesen beiden Filtern erreicht werden: sanitize_file_name und wp_handle_upload_prefilter

2
brasofilo

Dies ist nicht die eleganteste Antwort ... aber es funktioniert! Das 'WyPiekacz'-Plugin ist zwar cool, wurde aber seit drei Jahren nicht mehr aktualisiert.

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

Die eleganteste Lösung mit der besten Benutzererfahrung würde JavaScript verwenden, um dies sowohl für die Schnellbearbeitung als auch für die Nachbearbeitungsseite zu handhaben. Dann füge ich zum Glück etwas zum update_post_metadata-Filter hinzu (der zwar das vorgestellte Bild vollständig verhindert, aber keine Warnung ausgibt, da es mit AJAX ausgeführt wird).

Administratorbenachrichtigungen werden nicht angezeigt, da WordPress umleitet und auch dann nicht bei einer Schnellbearbeitung angezeigt wird (meine Methode zeigt eine Warnung bei der Schnellbearbeitung an, obwohl sie nicht gestaltet ist).

1
Ryan Taylor

Keine vollständige Antwort und nicht für das Kopfgeld, nur ein Beweis dafür, dass das Grundkonzept funktioniert:

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

Nur ein 60secondsSnippet und hat ein großes Problem: Dies wird bei jedem Upload ausgelöst, und nicht nur, wenn jemand bereit ist, ein ausgewähltes Bild hinzuzufügen, da wir keine Möglichkeit haben, den Kontext des Bild-Uploaders zu ermitteln. Es gibt einige Möglichkeiten, dies zu umgehen, im Grunde genommen mit ein paar Manipulationen.

Ich sollte jetzt arbeiten und habe keine Zeit, damit zu experimentieren. Aber ich wollte so viel wie möglich helfen, und vielleicht ist dies ein Ausgangspunkt für andere.

prost

1
ungestaltbar

Hier ist eine Möglichkeit, um sicherzustellen, dass ein Miniaturbild in der richtigen Größe vorhanden ist, bevor es angezeigt wird.

Erstellen Sie zunächst diese Hilfsfunktion:

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

Dann können Sie jetzt vor dem Anzeigen des Beitrags-Thumbnails Folgendes überprüfen:

if( has_post_thumbnail_of_size(640, 360) ) {
    the_post_thumbnail();
}
0
Sam Margulies

Das wird was brauchen :)

//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>';
      }           
    }   
    ?>

Es wird get_the_post_thumbnail verwendet, was auch hilfreich sein kann, sodass Sie keinen Haufen fn-Code erstellen müssen, den WordPress bereits für Sie verarbeiten kann, nur ein Gedanke.

Dabei wird $thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'Rand','meta_key' => '_thumbnail_id')); verwendet, um eine zufällige Funktion zu ermitteln, wenn keine vorhanden ist. Dies kann Ihnen dabei helfen, voranzukommen.

Dieses Bit echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) )); beachtet den 'small-thumb', der mit jenen add_image_size fns abgeglichen wird, die wir ein paar Zeilen zusammengestellt haben. Wenn Sie also add_image_size( 'small-square', 100, 100, true ); hatten, könnten Sie alternativ 'small-square' anrufen.

Prost

0
David