注目画像の最小寸法要件は?


14

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

そうは言っても、著者が「注目の画像として使用する」と決定した画像は、幅が640ピクセル以上、高さが360ピクセル以上である必要があります。

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

ここで、注目画像として使用される画像は、少なくとも640 x 360ピクセルである必要があります。私はコーダーというわけではありませんが、Maor Barazanyのコードを試してみて、出発点として使用しようとしていますが、役に立ちません。彼のコードは、アップロードされる画像の最小寸法を強制し ます


あなたの質問に答えることはできませんが、便利なフィルターと機能の素晴らしいコレクションに感謝しなければなりません;)
オレヘンリックスコグストロム

同上、オレ・ヘンリック:)
ブラソフィロ

投稿に添付されているが、投稿の注目画像として使用すること意図していない画像はどうですか?それは絶対に不可能というすべての投稿はなりしかポスト傑作写真を添付していますか?
チップベネット

いいえ。ただし、すべての投稿には注目の画像が必要です。これが、Maor Barazanyのコード(上記のリンク)が最小を強制する主な理由です。アップロードのディメンションは機能しません(または以下のungestaltbarのコード)。これらのコードスニペットは、アップロードされたすべての画像を最小サイズに強制します。ユーザーは追加の画像を投稿に追加できますが、「おすすめの画像」は、ストレッチせずにテーマに合わせて十分に大きくなければなりません。これが、アップローダーの[メディアライブラリ]タブに[画像サイズ]列が必要な理由でもあります。ユーザーは、注目の画像に十分な大きさの画像をすぐに選択できます。
トラビスプフランツ

私が取得するすべてのポストを持ちたいという注目のイメージ。しかし、それはなります常にあることのみ投稿に添付された画像?またはポストは持っている可能性があり、他の画像を追加する注目の画像?
チップベネット

回答:


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

私は1つの変更を行いました。すべての添付画像ではなく、注目画像のみの寸法を確認する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];に変更されました。
トラビスプフランツ

@TravisPflanzこれは「Medial Library Tab」の行を出力する関数ですcodex.wordpress.org/Function_Reference/get_media_item ここにはフィルターがないので、wordpressファイルにフックすることなく変更できるとは思いません。答え/ upvote役に立つならば......
ラジーブVyasさん

2

コアを確認しましたが、明らかに操縦の余地はほとんどありません。

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

1034行目のget_media_item関数は、添付ファイル/メディアテーブルをレンダリングする関数です。使用可能なフィルター、またはこれを呼び出す以前の関数が表示されません。

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

別の解決策は、アップロードされた画像のタイトルを変更し、その寸法を追加することだと思います。アップロードしたファイルのpost_titleを変更するかどうかはわかりませんが、この2つのフィルターでファイル自体の名前を変更できます:sanitize_file_namewp_handle_upload_prefilter


だから、あなたが言っているのは、それが可能だということです...たぶん?私は実際にはコーダーではないので、関数の作成に関しては他人に翻弄されています。どんなサポートも素晴らしいでしょう。
トラビスプフランツ

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

私は今仕事をしているはずであり、それを試す時間はありません。しかし、私はできる限り助けたかったので、これは他の人にとっての出発点かもしれません。

乾杯


返信ありがとうございます。あなたのコードは、Maor Barazanyのコードと同じように機能します(質問にリンクされています)。
トラビスプフランツ

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がリダイレクトするため管理者の通知は表示されず、それでもクイック編集には表示されません(スタイルは設定されていませんが、私の方法ではクイック編集に警告が表示されます)。


これはテストされましたか?しばらくこれをする必要はありませんでしたが、ブックマークしておくと便利です。
トラビスプフランツ

たぶん月曜日にステージングサーバーで実行できますが、実稼働環境で実行しているものと99%似たものがあります。
ライアンテイラー

0

サムネイルを表示する前に、適切なサイズのサムネイルがあることを確認する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();
}

ユーザーが小さすぎる画像の添付を制限する必要があります。小さすぎる場合の表示を制限する必要はありません。すべての投稿には画像を含める必要があります。すべての投稿に画像が表示されます。
トラビスプフランツ

テストを行う必要がありますが、これを行う方法を確認する方法が1つあります。アップロードが成功すると、WPはajaxを介して添付ファイルのデータをフェッチし、後で添付ファイルの詳細フォームを表示します。これは、画像が添付ファイルとして挿入され、メタデータが利用可能であることを意味します。IDEA:attachments_fields_to_editにフックして、添付ファイルオブジェクトを引数として取得し、メタデータの高さと幅を確認します。このチェックに失敗した場合、通常どおり添付ファイルの詳細フォームが表示されず、代わりにエラーメッセージが表示され、添付ファイルがすぐに削除されます。ただのアイデア。
-ungestaltbar

@ungestaltbar、あなたは正しい考えを持っているように聞こえます。私はコーダーではないので、私はコミュニティの慈悲にかかっています。
トラビスプフランツ

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野球のウェブサイトですので、アルバート・プホルスのランダムな写真はプリンス・フィールダーに関する記事に追加されません。ユーザーに注目の画像を追加させる。したがって、問題は、画像を追加するかどうかではなく、幅640より大きく、高さ360より大きな画像を追加するように強制することです。
トラビスプフランツ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.