[WordPress] 記事中の最初の画像を自動検出して表示

function catch_that_image() {
    global $post, $posts;
    $first_img = '';
    ob_start();
    ob_end_clean();
    $output = preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*/>/i', $post->post_content, $matches);
    $first_img = $matches [1] [0];

    if(empty($first_img)){ //Defines a default image
        $first_img = "/images/default.jpg";
    }
    return $first_img;
}

via 記事中の最初の画像を自動検出して、表示する方法

ob_start(), ob_end_clean() が意味不明。
preg_match_all でマッチしなかった時の対応は?
$post がセットされてなかった時の対応は?

っつうわけで書き直し

function catch_that_image() {
    global $post;

    return
      isset($post) && preg_match('/<img.+src=[\'"]([^\'"]+)[\'"][^¥/>]*/>/i', $post->post_content, $matches)
      ? $matches [1]
      : "/images/default.jpg";
}

Posted

in

by

Tags:

Comments

“[WordPress] 記事中の最初の画像を自動検出して表示”. への2件のフィードバック

  1. Yuriko のアバター

    (元の関数が) alt 属性を出すことを考慮してないので、img 要素自体を吐き出すように改造した方がいいと思います。

    1. wokamoto のアバター

      なんか、色々消えてたみたいです(wordpres.com 慣れてない)。
      このコードは img 要素を取得するのが目的じゃなくて、src を取得するのが目的だと判断しました。
      # 取得できなかった時のデフォルトが $first_img = "/images/default.jpg"; のため。

      OGP とかで、イメージの src を取得するのが目的なんかな?

      img 要素をそのまま抜き出すんなら

      return
            isset($post) && preg_match('/<img.+src=[\'"]([^\'"]+)[\'"][^¥/>]*/>/i', $post->post_content, $matches)
            ? $matches [0]
            : '<img src="/images/default.jpg" alt="default" />";
      

      かな?

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。