ข้อกำหนดขนาดขั้นต่ำสำหรับรูปภาพเด่นหรือไม่


14

ฉันกำลังสร้างเว็บไซต์เบสบอลที่มีผู้แต่งหลายคน จากประสบการณ์ที่ผ่านมาไม่ว่าคุณจะรู้จักใครดีแค่ไหนไม่ได้หมายความว่าพวกเขาจะติดตามหรือแม้แต่อ่านคำแนะนำของคุณ

ดังที่ได้กล่าวไปแล้วฉันต้องการให้รูปภาพใด ๆ ที่ผู้แต่งตัดสินใจที่จะ "ใช้เป็นรูปภาพเด่น" อย่างน้อย 640px กว้างและสูงไม่ต่ำกว่า 360px

ฉันต้องการให้แต่ละโพสต์มีรูปภาพเด่นโดยใช้ปลั๊กอิน WyPiekacz ; โพสต์จะไม่เผยแพร่หากไม่มีภาพเด่น ฉันได้ปิดกั้นความสามารถสำหรับผู้แต่งในการเชื่อมโยงไปยังเว็บไซต์อื่นโดยลบแท็บ "จาก URL" ในเพิ่มสื่อโดยใช้รหัสของ Bainternet

ตอนนี้ฉันต้องกำหนดว่าภาพใด ๆ ที่ใช้เป็นรูปภาพเด่นอย่างน้อย 640px คูณ 360px ฉันไม่ได้เป็น coder แต่ฉันได้ลองเล่นและพยายามใช้รหัสของ Maor Barazany เป็นจุดเริ่มต้น แต่ก็ไม่มีประโยชน์ รหัสของเขาบังคับ ขนาดขั้นต่ำสำหรับภาพใด ๆ ที่อัปโหลด


ไม่สามารถตอบคำถามของคุณได้ แต่ฉันต้องขอขอบคุณสำหรับชุดตัวกรองและฟังก์ชั่นที่ใช้งานได้ดี)
Ole Henrik Skogstrøm

เหมือนกัน, Ole Henrik :)
brasofilo

รูปภาพเกี่ยวกับโพสต์ แต่ไม่ได้มีไว้สำหรับใช้เป็นรูปภาพเด่นของโพสต์ มันเป็นอย่างที่เป็นไปไม่ได้ที่ทุกโพสต์จะเท่านั้นที่เคยได้โพสต์รูปภาพที่แนบมาแนะนำ?
Chip Bennett

ไม่ แต่ทุกโพสต์จะต้องมีรูปภาพเด่น นี่คือเหตุผลหลักที่รหัสของ Maor Barazany (ลิงก์ด้านบน) เพื่อบังคับให้ min ส่วนข้อมูลที่อัปโหลดจะไม่ทำงาน (หรือรหัสของ ungestaltbar ด้านล่าง) ตัวอย่างโค้ดเหล่านั้นบังคับให้อัปโหลดภาพทั้งหมดเป็นขนาดต่ำสุด ผู้ใช้อาจเพิ่มรูปภาพเพิ่มเติมลงในโพสต์ของพวกเขา แต่ "รูปภาพเด่น" จะต้องมีขนาดใหญ่พอที่จะให้พอดีกับธีมโดยไม่ยืดออก นี่คือสาเหตุที่ฉันต้องการคอลัมน์ "ขนาดภาพ" ในแท็บ "ไลบรารีสื่อ" ของผู้อัปโหลด ผู้ใช้จะสามารถเลือกภาพที่มีขนาดใหญ่พอสำหรับภาพที่โดดเด่นได้อย่างรวดเร็ว
เทรวิส Pflanz

ฉันได้รับที่คุณต้องการโพสต์ทั้งหมดจะมีภาพแนะนำ แต่นั่นจะเป็นภาพเดียวที่แนบมากับโพสต์หรือไม่ หรือโพสต์อาจจะมีภาพอื่น ๆ ในนอกจากนี้เพื่อภาพที่แนะนำ?
Chip Bennett

คำตอบ:


2

ดีถ้าคุณใช้ปลั๊กอิน WyPiekacz; ตามที่คุณพูดเพื่อตรวจสอบว่ามีการอัปโหลดภาพเด่นคุณสามารถปรับแต่งเล็กน้อยเพื่อตรวจสอบว่ามีภาพเด่นหรือไม่นั้นเป็น dimes ขั้นต่ำตามที่คุณต้องการ

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

คุณสามารถเปลี่ยนรหัสข้างต้นใน wypiekacz.php เป็น,

$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"


คุณเป็นคนที่สวยงาม! ทำงานได้อย่างสมบูรณ์แบบ! "แท็บไลบรารีสื่อ" อยู่ในหน้าจออัปโหลดสื่อเช่นเมื่อคุณคลิกที่ "ตั้งค่ารูปภาพที่แนะนำ" หรือ "อัปโหลด / แทรก" สำหรับสื่อ นี่คือภาพหน้าจอของความคิดของฉัน - picasaweb.google.com/lh/photo/…
Travis Pflanz

ฉันทำการเปลี่ยนแปลงครั้งเดียว list($url, $width, $height) = wp_get_attachment_image_src($post_id, 'full');เปลี่ยนเป็นlist($url, $width, $height) = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), "Full"); echo $imgsrc[0];ตรวจสอบขนาดของภาพที่แนะนำเท่านั้นและไม่ใช่รูปภาพที่แนบมาทั้งหมด
Travis Pflanz

@TravisPflanz นี่คือฟังก์ชั่นที่ส่งออกแถวของ "Medial Library Tab" codex.wordpress.org/Function_Reference/get_media_item ไม่มีตัวกรองที่นี่ดังนั้นฉันไม่คิดว่าคุณสามารถเปลี่ยนมันได้โดยไม่ต้องต่อเข้ากับไฟล์ wordpress .... คุณสามารถยอมรับได้ คำตอบ / upvote ถ้ามีประโยชน์ ......
Rajeev Vyas

2

ฉันตรวจสอบหลักและเห็นว่ามีห้องเล็ก ๆ สำหรับการซ้อมรบ

/wp-admin/includes/media.phpเป็นตำแหน่งที่สร้างแท็บเพิ่มสื่อ

ฟังก์ชั่นget_media_itemในบรรทัดที่ 1034 เป็นฟังก์ชั่นที่แสดงตารางแนบ / สื่อบันทึก ฉันไม่เห็นตัวกรองใด ๆ ที่มีอยู่หรือฟังก์ชันก่อนหน้านี้ที่เรียกใช้ตัวกรองนี้

การอ้างอิงและตัวอย่างรหัสบางอย่างเกี่ยวกับปัญหา

ฉันเดาว่าทางเลือกอื่นจะเปลี่ยนชื่อของภาพที่อัพโหลดและเพิ่มขนาดของมัน ฉันไม่แน่ใจเกี่ยวกับการเปลี่ยน post_title ของไฟล์ที่อัปโหลด แต่การเปลี่ยนชื่อไฟล์สามารถทำได้ด้วยตัวกรองสองตัวนี้: sanitize_file_nameและwp_handle_upload_prefilter


ดังนั้นสิ่งที่คุณพูดคืออาจเป็นไปได้ ... อาจจะ? ฉันไม่ได้เป็นผู้เขียนโคดดังนั้นฉันจึงอยู่ในความเมตตาของผู้อื่นเมื่อพูดถึงหน้าที่การเขียน การสนับสนุนใด ๆ จะดีมาก
Travis Pflanz

1

ไม่ใช่คำตอบที่สมบูรณ์และไม่ใช่สำหรับเงินรางวัลเพียงหลักฐานที่แสดงว่าแนวคิดพื้นฐานใช้งานได้:

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

เพียงแค่ 60 วินาทีและมีปัญหาใหญ่หนึ่งอย่าง: สิ่งนี้จะเริ่มขึ้นสำหรับการอัปโหลดทุกครั้งและไม่เพียง แต่ถ้ามีใครบางคนเพิ่มภาพที่โดดเด่นเพราะเราไม่มีวิธีที่จะทำให้บริบทของเครื่องมืออัปโหลดรูปภาพ มีวิธีการบางอย่างในการแก้ไขมันโดยทั่วไปมีการจัดการ js บางอย่าง

ฉันควรจะทำงานตอนนี้และไม่มีเวลาที่จะทดสอบกับมัน แต่ฉันต้องการช่วยมากเท่าที่จะทำได้และบางทีนี่อาจเป็นจุดเริ่มต้นสำหรับผู้อื่น

ไชโย


ขอขอบคุณสำหรับการตอบกลับรหัสของคุณเป็นสิ่งที่รหัสของ Maor Barazany ทำ (ซึ่งเชื่อมโยงกับคำถาม) แม้ว่าคุณจะดีขึ้นมากก็ตาม
เทรวิส Pflanz

1

นี่ไม่ใช่คำตอบที่หรูหราที่สุด ... แต่ใช้งานได้! ปลั๊กอิน 'WyPiekacz' แม้จะยอดเยี่ยม แต่ก็ยังไม่ได้รับการอัปเดตภายในสามปี

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

โซลูชันที่หรูหราที่สุดพร้อมประสบการณ์การใช้งานที่ดีที่สุดจะใช้ JavaScript เพื่อจัดการสิ่งนี้สำหรับทั้งการแก้ไขด่วนและหน้าแก้ไขการโพสต์ จากนั้นเพื่อความโชคดีฉันจะเพิ่มบางอย่างลงในupdate_post_metadataตัวกรอง (ซึ่งใช้งานได้ดีในการป้องกันภาพเด่น แต่จะไม่เตือนเพราะทำงานกับ AJAX)

ประกาศของผู้ดูแลระบบจะไม่ปรากฏขึ้นเนื่องจากการเปลี่ยนเส้นทาง WordPress และแม้กระทั่งจะไม่ปรากฏในการแก้ไขอย่างรวดเร็ว (วิธีการของฉันจะแสดงคำเตือนเกี่ยวกับการแก้ไขด่วนแม้ว่าจะไม่ได้กำหนดสไตล์)


สิ่งนี้ได้รับการทดสอบแล้วหรือยัง? ฉันไม่จำเป็นต้องทำสิ่งนี้สักพัก แต่ก็ดีในการบุ๊กมาร์ก
Travis Pflanz

บางทีในวันจันทร์ฉันสามารถใช้งานเซิร์ฟเวอร์ staging ของเราได้ แต่ฉันมีบางอย่างที่ 99% คล้ายกับการทำงานในการผลิต
Ryan Taylor

0

นี่คือวิธีหนึ่งในการทำให้แน่ใจว่ามีภาพขนาดย่อที่เหมาะสมก่อนที่จะแสดง

ก่อนอื่นให้สร้างฟังก์ชั่นตัวช่วยนี้:

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

จากนั้นคุณสามารถตรวจสอบก่อนที่จะแสดงภาพขนาดย่อของโพสต์:

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

ฉันต้องการ จำกัด ผู้ใช้ไม่ให้แนบรูปภาพที่เล็กเกินไปไม่ จำกัด ไม่ให้แสดงถ้ามันเล็กเกินไป โพสต์ทุกคนต้องมีภาพ โพสต์ทุกคนจะแสดงภาพ
เทรวิส Pflanz

จะต้องทำการทดสอบ แต่มีวิธีหนึ่งที่ฉันเห็นว่าสามารถทำได้: เมื่อใดก็ตามที่การอัปโหลดสำเร็จ WP จะดึงข้อมูลสิ่งที่แนบมาผ่าน ajax เพื่อแสดงแบบฟอร์มรายละเอียดสิ่งที่แนบมาหลังจากนั้น ซึ่งหมายความว่าภาพถูกแทรกเป็นสิ่งที่แนบมาและมีข้อมูลเมตา IDEA: สามารถเชื่อมต่อกับ attachments_fields_to_edit ซึ่งได้รับวัตถุที่แนบมาเป็นอาร์กิวเมนต์จากนั้นตรวจสอบความสูงและความกว้างของเมทาดาทาหากการตรวจสอบนี้ล้มเหลวจะไม่แสดงฟอร์มรายละเอียดสิ่งที่แนบมาตามปกติแสดงข้อความแสดงข้อผิดพลาดแทน . แค่ความคิด
ungestaltbar

@ungestaltbar ดูเหมือนว่าคุณมีความคิดที่ถูกต้อง ฉันไม่ได้เป็น coder ดังนั้นฉันจึงอยู่ในความเมตตาของชุมชน
เทรวิส Pflanz

0

สิ่งนี้จะทำให้ Whatcha ต้องการ :)

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

ใช้ get_the_post_thumbnail ซึ่งอาจช่วยคุณได้ดังนั้นคุณไม่จำเป็นต้องสร้างรหัส fn ที่ WordPress สามารถจัดการให้คุณได้แล้ว

วิธีนี้ใช้$thumbnails = get_posts(array('numberposts'=>1,'orderby'=>'rand','meta_key' => '_thumbnail_id'));ในการจับแบบสุ่มหากไม่มีอยู่สิ่งนี้อาจช่วยให้คุณเดินหน้าต่อไปได้

บิตนี้echo get_the_post_thumbnail($thumbnail->ID, 'small-thumb', array( 'alt' => esc_attr( $post->post_title ), 'title' => esc_attr( $post->post_title ) ));สังเกตเห็น'small-thumb'ว่ามันเข้าคู่กับ add_image_size fn ของเราได้รวมกันสองสามบรรทัด ดังนั้นถ้าคุณมีadd_image_size( 'small-square', 100, 100, true );คุณสามารถโทรหา'small-square'อีกทางเลือกหนึ่ง

ไชโย


ขอบคุณสำหรับการตอบกลับ. อย่างไรก็ตามนี่ไม่ได้ทำในสิ่งที่ฉันต้องการ เว็บไซต์เป็นเว็บไซต์ MLB baseball ดังนั้นรูปแบบสุ่มของ Albert Pujols จะไม่ทำงานเพื่อเพิ่มลงในบทความเกี่ยวกับ Prince Fielder หากคุณได้รับสิ่งที่ฉันหมายถึง ... นอกจากนี้ตามที่กล่าวไว้ข้างต้นฉันใช้ปลั๊กอิน WyPiekacz เพื่อ บังคับให้ผู้ใช้เพิ่มรูปภาพเด่น ดังนั้นปัญหาไม่ใช่ว่าพวกเขาจะเพิ่มรูปภาพ แต่ฉันต้องการบังคับให้พวกเขาเพิ่มรูปภาพที่มีขนาดกว้างกว่า 640 กว้างและสูง 360
เทรวิส Pflanz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.