サポート » 使い方全般 » 投稿に挿入した画像(メディア)の情報の取得

  • 解決済 tk5

    (@tk5)


    こんにちは。
    投稿に挿入した画像の情報(URL、幅、高さ)を取得して、Lightbox のような表示をしようとしています。

    その投稿自身に対してアップロードした画像の情報は以下のような感じで取得して非表示領域に出力して、その情報を元に jQuery で処理しています。

    <div class="attached_img_info"><!-- 非表示にしておく -->
    <?php
      $attachments = get_posts( array(
        'post_parent' => $post->ID,
        'orderby' => 'none',
        'order' => 'ASC',
        'post_status' =>  'inherit',
        'numberposts' => -1,
        'offset' => 0,
        'post_type' => 'attachment',
        'post_mime_type' => 'image',
       ) );
    
      if ( $attachments ) {
        foreach ( $attachments as $attachment ) {
          $link_image_src = wp_get_attachment_image_src($attachment->ID, 'large');
          echo '<p class="img_link">' .$link_image_src[0] .'</p>';  //URL
          echo '<p class="img_width">' .$link_image_src[1] .'</p>';  //幅
          echo '<p class="img_height">' .$link_image_src[2] .'</p>';  //高さ
          $title = esc_html(trim($attachment->post_title));
          if($title) echo '<'.$tag.' class="img_title">' .$title.'</'.$tag.'>';
        }
      }
    ?>
    </div>

    ところがこれでは「’post_parent’」を「$post->ID」としているため、他の投稿に対してアップロードした画像を投稿に挿入している場合、その画像の情報は取得できません。

    「’post_parent’」の指定を外せば全てのメディアの情報が取得できるので、できないことはないのですがそれではあまりに多くの画像の情報を取得してしまい、なんだかすごく無駄な気がしています。

    何とかして投稿に挿入されている画像(他の投稿に対してアップロードした画像を挿入したものを含む)の全ての情報を効率的に取得する方法はないものでしょうか?

    どなたかもしご存知でしたら教えていただければ大変ありがたいです。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • 記事に関連付けられた画像ではなく記事内に表示されている画像を取得したいということでしょうか?
    その場合content内容からpreg_match_allでIMGソースを取得すれば行けそうな気がします。
    下記のサイトが参考になるかも。
    http://nk-z.net/blog/?p=64

    ただこれだと本文内にある画像ソースがそのまま抽出されるために、サムネイルや縮小表示している場合はその画像のサイズが取得されてしまいます。
    フルサイズの画像が欲しくてかつフルサイズへのリンクがはられているようならimgのソースではなくそこにはられているリンクのhrefを抽出したほうがいいかもしれません。

    トピック投稿者 tk5

    (@tk5)

    gogoweb 様

    早速のご回答ありがとうございます。また、説明不足ですみません。

    記事に関連付けられた画像ではなく記事内に表示されている画像を取得したいということでしょうか?

    はい。

    過去にアップロードした画像などを「メディアを追加」で投稿に挿入して、get_posts を使って「’post_parent’」を「$post->ID」とするとその画像の情報(幅と高さ)が取得できないので困っています。(この場合の「過去にアップロードした画像」は記事に関連付けられていないということになるのだと勝手に解釈しています)

    その投稿に対してアップロードした画像の情報は前述の方法で問題なく取得できています。

    必要な情報は過去にアップロードした画像のフルサイズの「幅」と「高さ」で、これはコンテンツに出力されていないのでどうしたらいいかと悩んでいます。

    出力されている内容は以下のようなものです。

    <a href="http://xxxx/wp/wp-content/uploads/2013/09/phplist13.png">
        <img class="alignnone size-medium wp-image-265" width="300" height="258" alt="phplist13" src="http://xxxx/wp/wp-content/uploads/2013/09/phplist13-300x258.png">
    </a>

    a 要素の「href」にフルサイズの画像のパスがあるのですが、フルサイズの「幅」と「高さ」は出力されていません。このパスを元にnew Image()でイメージオブジェクトを生成し、それに対して src (パス)を設定して高さと幅を取得することを試したのですが、時々サイズが「0」となってしまいうまく行きませんでした。(2回目のクリックでは本来のサイズが取得できるのですが。。。)

    「preg_match_all」は今まで使ったことがありませんでした。大変参考になりました。
    ありがとうございます。

    モデレーター Takuro Hishikawa

    (@hissy)

    getimagesize()で画像サイズ取れますよ

    トピック投稿者 tk5

    (@tk5)

    hissy 様、gogoweb 様、

    貴重なご回答ありがとうございました。
    おかげさまでやりたかったことが以下のような方法で可能となりました。
    感謝しています。

    functions.php に以下を記述

    function getPostImages($mypost){
      if(empty($mypost)){
         return(null);
      }
      if(preg_match_all('/<a [^>]*"(http:[^">]*\/wp-content\/uploads\/[^">]*)"[^>]*>/u',$mypost->post_content,$img_array)){
        $resultArray = $img_array[1];
      }
        return($resultArray);
    }

    テンプレートに以下を記述

    $postImages = getPostImages($post);
    
    if($postImages != null) {
    	echo "<ol>\n";
    	for($i = 0; $i<count($postImages);$i++){
    		$img_src = trim($postImages[$i]);
    		 list($width, $height, $type, $attr) = getimagesize($img_src);
    		 echo '<li><span class="img_src">'. $img_src .'</span> ';
    		 echo '<span class="img_width">'. $width .'</span> ';
    		 echo '<span class="img_height">'.$height .'</span></li>'."\n" ;
    	}
    	echo "</ol>\n";
    }

    大変助かりました。

    トピック投稿者 tk5

    (@tk5)

    解決済みにするのを忘れていました。

5件の返信を表示中 - 1 - 5件目 (全5件中)
  • トピック「投稿に挿入した画像(メディア)の情報の取得」には新たに返信することはできません。