Öne Çıkan Resim için Minimum Boyut Gereksinimi?


14

Birden fazla Yazarlı bir beyzbol web sitesi oluşturuyorum. Geçmiş deneyimlerden, birisini kişisel olarak ne kadar iyi tanıdığınız fark etmeksizin, talimatlarınızı takip edecekleri hatta okuyacakları anlamına gelmez.

Bununla birlikte, bir Yazarın "Öne çıkan görüntü olarak kullan" olarak karar verdiği herhangi bir görüntünün en az 640 piksel genişliğinde ve en az 360 piksel yüksekliğinde olmasını zorunlu kılmak istiyorum.

Ben her yazı WyPiekacz eklentisi kullanarak bir Özellikli Görüntü olması gerekir ; yayın Öne Çıkan Resim olmadan yayınlanmaz. Bir yazarın Bainternet'in kodunu kullanarak Medya Ekle'deki "URL'den" sekmesini kaldırarak başka bir siteye hotlink bağlama yeteneğini engelledim.

Şimdi, özellikli görüntü olarak kullanılan herhangi bir görüntünün en az 640 piksel x 360 piksel olmasını istemem gerekiyor. Ben bir kodlayıcı demek değilim ama Maor Barazany'nin kodunu başlangıç ​​noktası olarak oynuyorum ve kullanmaya başladım. Kodu yüklenen herhangi bir resim için minimum boyutları zorlar .


Sorunuzu cevaplayamıyorum, ancak kullanışlı filtreler ve işlevlerin güzel bir koleksiyonu için teşekkür etmek zorundayım;)
Ole Henrik Skogstrøm 27:03

ditto, Ole Henrik :)
brasofilo

Yayınlara iliştirilen, ancak Yayınla Öne Çıkan Resim olarak kullanılması amaçlanmayan görüntüler ne olacak? Öyle mi kesinlikle imkansız olduğunu her mesaj olacak sadece hiç Mesaj Öne Çıkan iliştirilmesi?
Chip Bennett

Hayır, ancak her gönderinin özellikli bir resme sahip olması gerekir. Maor Barazany'nin kodunun (yukarıdaki bağlantı) min. yüklemedeki boyutlar işe yaramaz (veya aşağıdaki ungestaltbar kodu). Bu kod parçacıkları TÜM yüklenen görüntüleri minimum boyutlara zorlar. Kullanıcılar yayınlarına ek resimler ekleyebilir, ancak "Öne Çıkan Resim" temaya sığmadan sığacak kadar büyük olmalıdır. Bu yüzden yükleyicinin "Medya Kitaplığı" sekmesinde bir "Resim Boyutları" sütunu istiyorum. Kullanıcılar, öne çıkan bir resim için yeterince büyük bir resim seçebilir.
Travis Pflanz

Ben olsun tüm mesajları sahip olmak istedikleri bir Sunulan Resim. Ama bu olacak hep olmak sadece Yayınlara eklenen görüntüyü? Veya Yayınlar , Öne Çıkan Resme ek olarak başka resimler de içerebilir mi?
Chip Bennett

Yanıtlar:


2

WyPiekacz eklentisi kullanıyorsanız iyi; öne çıkan görüntünün yüklendiğini kontrol etmek için söylediğin gibi, eğer özellikli görüntü varsa, gereken minimum boyutlarda olup olmadığını kontrol etmek için biraz değiştirebilirsin.

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

Yukarıdaki kodu wypiekacz.php dosyasında,

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

"Media Library Tab" ile ne demek istediğini anlamıyorum.


Güzel bir adamsın! Mükemmel çalışıyor! "Medya Kitaplığı Sekmesi", medya için "Öne Çıkan Resmi Ayarla" veya "Yükle / Ekle" yi tıkladığınızda olduğu gibi medya yükleme ekranındadır. İşte fikrimin
Travis Pflanz

Bir değişiklik yaptım. yalnızca Ekli Görüntünün boyutlarını kontrol etmek için list($url, $width, $height) = wp_get_attachment_image_src($post_id, 'full');değiştirildi list($url, $width, $height) = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), "Full"); echo $imgsrc[0];, ekli görüntülerin tümünü değil.
Travis Pflanz

@TravisPflanz Bu "Medial Library Tab" satırını çıktısı fonksiyonudur codex.wordpress.org/Function_Reference/get_media_item Burada filtre yok, bu yüzden wordpress dosyasına çengel değiştirebileceğini düşünmüyorum .... Kabul edebilirsin answer / upvote if useull ......
Rajeev Vyas

2

Çekirdeği kontrol ettim ve görünüşe göre manevra için çok az yer var.

/wp-admin/includes/media.php Medya Ekle sekmelerinin oluşturulduğu yerdir

Get_media_item işlevi1034 satırındaki , ekleri / ortam tablosunu oluşturan . İçinde herhangi bir filtre veya bunu çağıran önceki işlevleri göremiyorum.

Soruna ilişkin bazı referanslar ve kod örnekleri.

Alternatif bir çözüm, yüklenen görüntülerin başlığını değiştirmek ve boyutlarını eklemek olacaktır. Yüklenen bir dosyanın post_title'ını değiştirmekten emin değilim, ancak dosyanın kendisini yeniden adlandırmak bu iki filtreyle elde edilebilir: sanitize_file_name ve wp_handle_upload_prefilter


Yani, diyorsun ki bu mümkün olabilir ... Belki? Gerçekten kodlayıcı değilim, bu yüzden yazma işlevleri söz konusu olduğunda başkalarının merhametindeyim. Herhangi bir destek harika olurdu.
Travis Pflanz

1

Tam bir cevap değil, ödül için değil, sadece temel kavramın işe yaradığına dair bir kanıt:

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

Sadece 60 saniyelik bir snippet ve büyük bir problemi var: Bu, her biri yükleme için tetiklenecek, yalnızca birisi özellikli resim eklemek için uygun değilse, çünkü resim yükleyicinin bağlamını elde etmenin bir yolumuz yok. Temelde bazı js manipülasyonu ile çalışmanın bazı yolları vardır.

Şu anda çalışmalıyım ve bunu deneyecek zamanım yok. Ama elimden geldiğince yardım etmek istedim ve belki bu başkaları için bir başlangıç ​​noktasıdır.

şerefe


Cevabınız için teşekkürler, kodunuz Maor Barazany kodunun ne yaptığını yapar (bu soruya bağlıdır), ancak sizinki çok daha iyi.
Travis Pflanz

1

Bu en şık cevap değil ... ama işe yarıyor! 'WyPiekacz' eklentisi, serin olmasına rağmen, üç yıl içinde güncellenmedi.

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

En iyi kullanıcı deneyimine sahip en zarif çözüm, bunu hem Hızlı Düzenleme hem de yayın düzenleme sayfası için ele almak için JavaScript'i kullanır. Sonra iyi şanslar içinupdate_post_metadata filtreye bir eklerdim (özellikli görüntüyü önlemek için tamamen çalışır, ancak AJAX ile çalıştığından bir uyarı vermez).

WordPress yönlendirmeleri nedeniyle yönetici bildirimleri görünmez ve hatta bir Hızlı Düzenleme'de görünmez (yöntemim, stilize olmasa da Hızlı Düzenleme'de bir uyarı gösterir).


Bu test edildi mi? Bunu bir süredir yapmam gerekmedi, ancak yer imi koymak güzel.
Travis Pflanz

Belki Pazartesi günü evreleme sunucumuzda çalıştırabilirim, ancak üretimde buna benzer% 99'luk bir şeyim var.
Ryan Taylor

0

Aşağıda, gösterilmeden önce uygun boyutta bir küçük resim bulunduğundan emin olmanın bir yolu vardır.

İlk olarak, bu yardımcı işlevi oluşturun:

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

Ardından gönderi küçük resmini görüntülemeden önce kontrol edebilirsiniz:

if( has_post_thumbnail_of_size(640, 360) ) {
    the_post_thumbnail();
}

Bir kullanıcının çok küçük bir görüntü eklemesini, çok küçükse görüntülenmesini kısıtlamam gerekiyor. Her gönderi bir resim içermelidir ZORUNLU. Her yazı bir resim görüntüler.
Travis Pflanz

Test yapmak zorunda kalacaktım ama bunun nasıl yapılabileceğini görmenin bir yolu var: Bir yükleme başarılı olduğunda WP, ek detay formunu daha sonra görüntülemek için ajax aracılığıyla ek verilerini alacaktır. Bu, görüntünün ek olarak eklendiği ve meta verilerin kullanılabilir olduğu anlamına gelir. IDEA: Ek nesnesini bağımsız değişken olarak alan attachments_fields_to_edit içine bağlanabilir, ardından meta veri yüksekliğini ve genişliğini kontrol edebilirsiniz, bu kontrol başarısız olursa ek ayrıntıları formunu her zamanki gibi göstermezse, bunun yerine bir hata mesajı gösterir ve eki anında siler . sadece bir fikir.
ungestaltbar

@ungestaltbar, doğru fikre sahipmişsiniz gibi geliyor. Ben kodlayıcı değilim, bu yüzden topluluğun merhametindeyim.
Travis Pflanz

0

Bu ne gerek yapacak :)

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

Ayrıca, size yardımcı olabilecek get_the_post_thumbnail kullanıyor, bu yüzden WordPress'in sizin için zaten ele alabileceği bir grup fn kodu oluşturmanız gerekmiyordu, sadece bir düşünce.

Bu, $thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id'));yoksa rastgele bir tane almak için kullanır , bu ilerlemenize yardımcı olabilir.

Bu bit echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));, 'small-thumb'birkaç satır bir araya getirdiğimiz add_image_size fn'lerle eşleştiğini fark eder . Eğer sahip add_image_size( 'small-square', 100, 100, true );olsaydın 'small-square'alternatif olarak arayabilirsin .

Şerefe


Cevap için teşekkürler. Ancak bu ihtiyacım olanı yapmıyor. Web sitesi bir MLB beyzbol web sitesi, bu yüzden Albert Pujols'un rastgele bir resmi Prens Fielder ile ilgili bir makaleye eklenmeyecek, demek istediğimi anlıyorsanız ... Ayrıca, yukarıda belirttiğim gibi, WyPiekacz eklentisini kullanıyorum kullanıcıları öne çıkan bir resim eklemeye zorlayın. Yani, sorun bir görüntü ekleyip eklememeleri değil, onları 640 geniş ve 360 ​​boydan daha büyük bir görüntü eklemeye zorlamak istiyorum.
Travis Pflanz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.