web-dev-qa-db-ja.com

要求されたサイズが存在する場合にのみサムネイルを表示する

投稿サムネイルを取得して出力する関数を使用すると、要求されたサムネイルを指定したサイズで表示しますが、このサイズが存在しない場合は、サムネイルを元のサイズで表示してブラウザにサイズ変更を強制します。

要求されたサイズが存在しない場合、どうすればそれらを強制的に「画像なし」のようなプレースホルダーを表示させることができますか?

10
Alex

と仮定すると質問はwp_get_attachment_image_srcに関するものです。
wp_get_attachment_linkについても考えられますが、関連しているものの、この分析には含まれていません。


この質問に答えるこの問題に気づいたMedia ManagerでWP]生成されたすべてのサムネイルを表示するにはどうすればよいですか?
この質問の問題に関する実用的なコードを参照するには、それを参照してください

そして、これが WordPressフォーラムトピック につながります。


関数 wp_get_attachment_image_src($ attachment_id、$ size、$ icon) は以下を含む配列を返します:

[0] => url  
[1] => width  
[2] => height  
[3] => is intermediate

[3]がfalseの場合、original画像データが返されます。


Bothwp_get_attachment_image_srcwp_get_attachment_linkは、image_downsize内の/wp-includes/media.php関数に依存しています。
そして、ここでこの4項目の配列が返されます。

2
brasofilo

これは私が要求されたサイズが存在する場合にだけサムネイルを表示することができた方法です:

if ( has_post_thumbnail() )  {
    $imgdata = wp_get_attachment_image_src( get_post_thumbnail_id(), 'thumbnail' ); //change thumbnail to whatever size you are using
    $imgwidth = $imgdata[1]; // thumbnail's width                   
    $wanted_width = 300; //change this to your liking
    if ( ($imgwidth < $wanted_width ) ) {
        the_post_thumbnail();
    } else { 
        //do whatever you want
    }
}

wp_get_attachment_image_srcについてもっと学ぶためにはCodexを読んでください。

1
trewknowledge

よくわかりませんが、phpのgetimagesize()関数を次のように使用することができます。

//This must be in one loop

if(has_post_thumbnail()) {
    $wanted_width = 300;
    $wanted_height = 150;
    $id = get_post_thumbnail_id()
    $image = wp_get_attachment_image_src($id);
    if ($image){
        list($width, $height) = getimagesize($image[0]);
        if (($wanted_height = $width) && ($wanted_height = $height)){
            the_post_thumbnail();
        }
        else{
            //default when no image
            echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
        }
    }
    else{
        //default when no image
        echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
    }
} else {
    //default when no image
    echo '<img src="'.get_bloginfo("template_url").'/images/img-default.png" />';
}

私はそれが質問に対する直接の答えではないことを知っていますが、 AJAX Thumbnail Rebuildというプラグインを使用することができます - このプラグインを使用すると投稿のサムネイルを再構築できます。投稿のサムネイルをアップロードした後にadd_image_size()を実行した場合に便利です。

1
Bainternet

それはより良い方法であるようです。グローバル変数$ _wp_additional_image_sizesを使用します。登録されたすべてのimage_sizeが格納されます。画像サイズの名前が定義されているかどうかを確認したいのであれば:

  global $_wp_additional_image_sizes;
  if ( array_key_exists( 'desired-image-size' , $_wp_additional_image_sizes) )
  {
    //your code here
  }
  else
  {
    //default code here 
  }
0
Mathias

最善の方法は、Wordpressの組み込み "get_intermediate_image_sizes"関数を使用して画像サイズの完全なリストを配列として返し、それを見てみることです。

show_image_by_size( 10470, 'custom_size' );

function show_image_by_size( $_post_id, $_desired_size ) {
  $_sizes = get_intermediate_image_sizes();
  $_thumbnail_id = get_post_thumbnail_id( $_post_id );
  $_image_size = ( in_array( $_desired_size , $_sizes ) ) ? $_desired_size : 'full';
  $image = wp_get_attachment_image_src( $_thumbnail_id, $_image_size );
  echo '<img src="' . esc_url( $image[0] ) . '" />';
}
0
Charles Jaimet

それが存在しない場合は実際にあなたのために実際に自動的に画像サイズを作成するプラグインがあります。 http://austinmatzko.com/wordpress-plugins/filosofo-custom-image-sizes/ /

私はまだこのプラグインを使う必要はありません。しかし、それは一撃の価値があります。 WP coreに似たような機能を追加することについての話があります、おそらく3.2 http://core.trac.wordpress.org/ticket/15311

0
Thompson