web-dev-qa-db-ja.com

注目の画像に必要な最小寸法

私は複数の著者を含む野球のウェブサイトを作成しています。過去の経験から、たとえあなたが誰かを個人的に知っているかどうかに関係なく、それは彼らがあなたの指示に従うか、あるいは読むことさえも意味しません。

そうは言っても、著者が「おすすめの画像として使用」を選択した画像は、幅640ピクセル、高さ360ピクセル以上にすることをお勧めします。

各投稿に WyPiekaczプラグインを使用した注目の画像があることを要求しました ;投稿はおすすめ画像なしでは公開されません。作成者が別のサイトにホットリンクする機能を [メディアの追加]の[URLから]タブを削除することによって Bainternetのコードを使用してブロックしました。

今度は私は特色にされたイメージとして使用されるどのイメージでも少なくとも640px x 360pxであることを要求する必要がある。私はコーダーではありませんが、Maor Barazanyのコードを出発点として遊んで使用しようとしましたが、役に立ちませんでした。彼のコードは アップロードされる画像の最小サイズ を強制します。

14
Travis Pflanz

もしあなたが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') );
        }

よく私はあなたが "メディアライブラリタブ"によって何を意味するのか理解していません。

2
Rajeev Vyas

私はコアをチェックして、どうやら操縦の余地がないようです。

/wp-admin/includes/media.phpは「メディアの追加」タブが生成される場所です。

行1034の関数get_media_itemは、添付ファイル/メディアテーブルをレンダリングするものです。私はそれで利用可能なフィルタやこれを呼び出す以前の機能を見ることができません。

この問題に関するいくつかの参照とコードサンプル。

アップロードされた画像のタイトルを変更して、その寸法を追加することが私の代わりの解決策になると思います。アップロードされたファイルのpost_titleを変更することについてはよくわかりませんが、ファイル自体の名前を変更するには、sanitize_file_namewp_handle_upload_prefilterの2つのフィルタを使用します。

2
brasofilo

これは最も洗練された答えではありません...しかしそれはうまくいきます! '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がリダイレクトするので管理者への通知は表示されず、それでもクイックエディットには表示されません(スタイルは設定されていませんが、クイックエディットで警告が表示される).

1
Ryan Taylor

完全な答えではなく、賞賛のためでもなく、基本的な概念が機能することの証明にすぎません。

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秒のスニペットで、大きな問題が1つあります。アップロードされるたびに起動します。注目する画像を追加しようとしている場合だけではありません。基本的にいくつかのjs操作でそれを回避するいくつかの方法があります。

私は今働いているべきです、そしてそれを試す時間がありません。しかし、私はできる限り手助けをしたいと思っていました。おそらくこれが他の人にとっての出発点です。

乾杯

1
ungestaltbar

表示する前に、適切なサイズのサムネイルがあることを確認する1つの方法があります。

まず、このヘルパー関数を作ります。

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();
}
0
Sam Margulies

これは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を使っているので手助けになるかもしれないので、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 ) ));は、それが我々が数行をまとめたそれらのadd_image_size fnのものと一致する'small-thumb'に気づくでしょう。あなたがadd_image_size( 'small-square', 100, 100, true );を持っていたのであれば、代わりに'small-square'を呼び出すことができます。

乾杯

0
David