サポート » 使い方全般 » PHPを使って複数の画像を別々のDIV内に配置

  • WordPressを使ってWebサイトを作っています。
    PHPに関してはズブの素人です。どなたかアドバイス頂けましたら助かります。

    下記のような構造のページを作りたいと考えています。

    <div id="image">
       <img src="記事内1枚目の写真を大きく">
    </div>
    
    <div id="text">
       <p>写真なしで記事の本文をここに</p>
    </div>
    
    <div id="gallery">
       <img src="2枚目以降の">
       <img src="写真を">
       <img src="floatで並べて">
       <img src="サムネイル表示">
    </div>

    今のところ、投稿から画像のみを抜き出し、div#imageとdiv#textを作るところまではいけました。

    <?php
       $img = '/\<img ([^\>]+)\>/i';
       $text = get_the_content();
       preg_match($img,$text,$matches);
       $image = $matches[0];
       $text = preg_replace($img,"",$text);
    ?>
    
    <?php echo $image; ?>
    <?php echo $text; ?>

    という感じです。

    しかし、2枚目以降の画像を取り出すのが、うまくできません。
    $matches[1]とすると、1枚目のimgに付随するclass=”〜〜”などの文字列が抜き出されるばかりです。
    imgのclass別で抽出しようかとも考えましたが、技術が追いつきません。
    こういう場合、何かいい方法はないでしょうか?

    どなたかご教授ください。どうかよろしくお願いします。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • モデレーター jim912

    (@jim912)

    kochin2008さん、こんにちは。

    preg_matchは最初にパターン適合した時点で処理が止まってしまいます。替わりにpre_match_allを使って、$matchesをvar_dumpしてみてください。(var_dumpは取得できたデータの確認のためです。)
    もう1歩なので頑張って下さい。

    トピック投稿者 kochin2008

    (@kochin2008)

    ・kvex さん

    これについては知りませんでした。
    行き詰まったら試してみます。ありがとうございます!!

    ・jim912 さん

    preg_match_all($img,$text,$matches);
    var_dump($matches);
    $images = $matches[0][0];

    で、うまくできました!!

    array(2) { [0]=> array(2) { [0]=> string(153) "1枚目の写真がそのまま" [1]=> string(144) "2枚目の写真がそのまま" } [1]=> array(2) { [0]=> string(147)
    "class="alignnone size-full wp-image-79" title="photo" src="http://ドメイン/wp/wp-content/uploads/photo2.jpg" alt="" width="450" height="600" /" [1]=> string(138)
    "class="alignnone size-full wp-image-81" title="1" src="http://ドメイン/wp/wp-content/uploads/1.jpg" alt="" width="449" height="567" /" } }

    のような感じでvar_dumpが表示され、
    $images = $matches[0][0];
    と指定した所、1枚目の画像が、
    $people_img = $matches[0][1];
    と指定した所、2枚目の画像が表示されました!!

    本当にありがとうございました。

    ただ、これだと画像全体の総数が変わった場合は対処できなさそうなので、いい方法を検索してみています。$matches[2枚目以降]のような指定方法って、存在しないんでしょうか?
    質問を重ねてしまい、ごめんなさい。どうかよろしくお願いします。

    モデレーター jim912

    (@jim912)

    kochin2008さん、こんにちは。

    枚数増やして試してみましたか?
    増やして、$matchesの内容がどのように変化するか見れば、どうすればいいのかも分かってくると思いますが。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「PHPを使って複数の画像を別々のDIV内に配置」には新たに返信することはできません。