• 解決済 photographer hiro.

    (@mura0403)


    PHP素人なんですが、写真サイトを作りたいのですが
    「画像に対して縦長か横長か条件判定をしたい」のですが

    簡単なIF文はわかるのですが、アタッチメント関係がどうも苦手です。
    申し訳ございませんが、よろしくお願い申し上げます。

    [モデレーター編集: トピックタイトルが空でアクセスできなかったため、タイトルを設定しました。]

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • wp_get_attachment_image_srcという関数の戻り値(配列)に横サイズと縦サイズが含まれています。それらの値を比較することで条件判定ができるのではないでしょうか。

    関数リファレンス/wp get attachment image src – WordPress Codex 日本語版

    トピック投稿者 photographer hiro.

    (@mura0403)

    mimosafa様

    ありがとうございます。
    このような感じでよろしいでしょうか?

    <?php //カスタムフィールドの時の定義
      $image = wp_get_attachment_image_src(get_post_meta($post->ID, 'image1', true), 'full');
      //echo '<meta property="og:image" content="'.$image[0].'" />';
      $img_w = $image[1];//画像の横サイズ取得
      $img_h = $image[2];//画像の縦サイズ取得
      ?>
    
      <?php if ( $img_w == $img_h ) : //画像が正方形の時の処理 ?>
      正方形
      <?php elseif ( $img_w > $img_h ) : //画像がランドスケープの時の処理 ?>
      横長
      <?php elseif ( $img_w < $img_h ) : //画像がポートレートの時の処理 ?>
      縦長
      <?php endif; ?>
    • ループ内の記述である($postにWP_Postオブジェクトが代入されている)
    • image1というのがアタッチメントIDを値として持つ、カスタムフィールドのキーである

    上記の条件内であればご提示のコードで大丈夫だと思います。

    画像がない場合など、もう少し細かく条件分岐をすればより安全ですね。

    <?php
    /**
     * Loop 内
     */
    $attachment_shape = null;
    $attachment_id = get_post_meta( $post->ID, 'image1', true );
    if ( $attachment_id ) {
    	$image = wp_get_attachment_image_src( $attachment_id, 'full' );
    	if ( $image ) {
    		$img_w = $image[1];
    		$img_h = $image[2];
    		if ( $img_w == $img_h ) {
    			$attachment_shape = 'square';
    		} elseif ( $img_w > $img_h ) {
    			$attachment_shape = 'horizontal';
    		} else {
    			$attachment_shape = 'vertical';
    		}
    	}
    }
    
    switch ( $attachment_shape ) {
    	case 'square' :
    		echo '正方形';
    		break;
    	case 'horizontal' :
    		echo '横長';
    		break;
    	case 'vertical' :
    		echo '縦長';
    		break;
    	default :
    		echo 'そもそも画像なし';
    }

    みたいな感じで。

    トピック投稿者 photographer hiro.

    (@mura0403)

    mimosafa様
    ありがとうございました。
    無事反映できました。

    今まで「switch ( )」使ったことなかったので勉強になりました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「画像に対して縦長か横長か条件判定をしたい」には新たに返信することはできません。