추천 이미지에 대한 최소 치수 요구 사항?


14

여러 명의 저자가있는 야구 웹 사이트를 만들고 있습니다. 과거의 경험에서, 당신이 누군가를 개인적으로 얼마나 잘 알고 있더라도, 그들이 당신의 지시를 따르거나 읽을 것이라는 의미는 아닙니다.

즉, 저자가 "추천 이미지로 사용"으로 결정한 이미지의 너비는 640 픽셀 이상, 높이는 360 픽셀 이상이어야합니다.

각 게시물에는 WyPiekacz 플러그인을 사용하여 추천 이미지가 있어야합니다 . 게시물은 추천 이미지가 없으면 게시되지 않습니다. Bainternet의 코드를 사용하여 미디어 추가의 "URL에서"탭제거하여 작성자가 다른 사이트로 핫 링크하는 기능을 차단했습니다 .

이제 추천 이미지로 사용 된 이미지가 640x360 픽셀 이상이어야합니다. 나는 코더를 의미하지는 않지만 Maor Barazany의 코드를 시작 지점으로 사용하려고했지만 아무 소용이 없습니다. 그의 코드 는 업로드 된 이미지의 최소 크기를 강제 합니다 .


귀하의 질문에 대답 할 수는 없지만 편리한 필터와 기능의 훌륭한 컬렉션에 감사드립니다.)
Ole Henrik Skogstrøm

ditto, Ole Henrik :)
brasofilo

어떤 게시물에 첨부되지만되지 않은 이미지에 대한 의도 된 포스트 주요 이미지로 사용하기? 그것은가 절대적으로 불가능한 것을 모든 게시물합니다 오직 포스트 추천 이미지가 붙어있다?
칩 베넷

아니요, 그러나 모든 게시물에는 추천 이미지가 있어야합니다. 이것이 바로 바라 자니 Maor Barazany의 코드 (위 링크)가 min을 강제하는 주된 이유입니다. 업로드시 크기가 작동하지 않습니다 (또는 아래의 ungestaltbar 코드). 이러한 코드 스 니펫은 업로드 된 모든 이미지를 최소 크기로 강제합니다. 사용자는 게시물에 이미지를 추가 할 수 있지만 "추천 이미지"는 테마를 맞추지 않고 충분히 커야합니다. 업 로더의 "미디어 라이브러리"탭에서 "이미지 크기"열을 원하는 이유이기도합니다. 사용자는 추천 이미지에 적합한 이미지를 빠르게 선택할 수 있습니다.
Travis Pflanz

내가 얻을 모든 게시물이하려는 주요 이미지. 그러나 그 것이다 항상경우에만 게시물에 첨부 된 이미지를? 또는 게시물이있을 수 있는 다른 이미지를 추가 두드러진 이미지?
칩 베넷

답변:


2

WyPiekacz 플러그인을 사용하는 경우에도 좋습니다. 추천 이미지가 업로드되었는지 확인하기 위해 말했듯이 추천 이미지가 있으면 필요한만큼 최소 크기인지 확인하기 위해 조금만 조정할 수 있습니다.

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

"미디어 라이브러리 탭"의 의미를 이해하지 못합니다.


당신은 아름다운 사람입니다! 완벽하게 작동합니다! 미디어의 "특징 이미지 설정"또는 "업로드 / 삽입"을 클릭 할 때와 같이 "미디어 라이브러리 탭"은 미디어 업로드 화면에 있습니다. 여기 내 생각의 스크린 샷이다 - picasaweb.google.com/lh/photo/...
트래비스 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 이것은 "중앙 라이브러리 탭"의 행을 출력하는 함수입니다 codex.wordpress.org/Function_Reference/get_media_item 여기에 필터가 없으므로 워드 프레스 파일에 연결하지 않고 변경할 수 없다고 생각합니다 .... 유용한 경우 답변 / 공개 .......
Rajeev Vyas

2

나는 핵심을 확인했고 기동의 여지가 거의없는 것 같습니다.

/wp-admin/includes/media.php 는 미디어 추가 탭이 생성되는 곳입니다.

1034 행의 get_media_item 함수 는 첨부 파일 / 미디어 테이블을 렌더링하는 기능입니다. 사용 가능한 필터 나 이것을 호출하는 이전 함수를 볼 수 없습니다.

이 문제와 관련된 일부 참조 및 코드 샘플.

다른 해결책은 업로드 된 이미지의 제목을 변경하고 크기를 추가하는 것입니다. 업로드 된 파일의 post_title을 변경하는 것에 대해서는 잘 모르겠지만 sanitize_file_namewp_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의 코드 (질문과 관련이 있음) 가하는 일을 수행하지만 훨씬 더 좋습니다.
Travis Pflanz

1

이것은 가장 우아한 대답은 아니지만 작동합니다! 'WyPiekacz'플러그인은 멋지지만 3 년 동안 업데이트되지 않았습니다.

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

월요일에는 스테이징 서버에서 실행할 수 있지만 프로덕션에서 실행되는 것과 비슷한 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();
}

사용자가 너무 작은 이미지를 첨부하지 못하도록 제한해야합니다. 너무 작은 이미지를 표시하지 않아야합니다. 모든 게시물에는 반드시 이미지가 포함되어야합니다. 모든 게시물에 이미지가 표시됩니다.
Travis Pflanz

테스트를 수행해야하지만 이것이 어떻게 수행되는지 알 수있는 한 가지 방법이 있습니다. 업로드에 성공할 때마다 WP는 ajax를 통해 첨부 파일 데이터를 가져 와서 첨부 파일 세부 정보 양식을 나중에 표시합니다. 이는 이미지가 첨부 파일로 삽입되었고 메타 데이터를 사용할 수 있음을 의미합니다. 아이디어 : attachments_fields_to_edit에 연결하여 첨부 파일을 인수로 가져 와서 메타 데이터 높이와 너비를 확인할 수 있습니다.이 검사에 실패하면 첨부 파일 세부 정보 양식이 정상적으로 표시되지 않고 대신 오류 메시지가 표시되고 첨부 파일이 즉시 삭제됩니다 . 그냥 생각이야
ungestaltbar

@ungestaltbar, 당신이 옳은 생각을 가지고있는 것처럼 들립니다. 저는 코더가 아니므로 커뮤니티의 자비에 있습니다.
Travis Pflanz

0

이것은 필요한 것입니다 :)

//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을 사용하여 도움이 될 수 있으므로 WordPress에서 이미 처리 할 수있는 fn 코드를 만들 필요가 없습니다.

이것은 $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 야구 웹 사이트이므로 Albert Pujols의 임의의 그림은 Prince Fielder에 관한 기사에 추가되지 않습니다. 사용자가 추천 이미지를 추가하도록합니다. 따라서 문제는 이미지를 추가하는지 여부가 아니라 너비가 640보다 크고 키가 큰 이미지를 강제로 추가하고 싶습니다.
Travis Pflanz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.