toggle
2020-01-23

投稿の最初の画像をサムネイルに・・・したらNotice: Undefined offset: 1

よく見るコードをコピペ→Notice: Undefined offset: 1

	function catch_that_image() {
    global $post, $posts;
    $first_img = '';
    ob_start();
    ob_end_clean();
    $output = preg_match_all('//i', $post->post_content, $matches);
    $first_img = $matches [1] [0];

if(empty($first_img)){ //画像がなかった場合
        $first_img = "noimg.jpg";
    }
    return $first_img;
}

Notice: Undefined offset: 1は、配列が存在しない値だとでるらしい。
つまり、$first_imgの中身がない場合 = 記事内に画像がない場合、
$matches[1]がないのでこの警告になるのか?と思い、
$matches [1] [0]の前に、$outputに値があるかどうかで分岐することにした。

実際に使ったコードがこれ

function catch_that_image() {
     global $post, $posts;
     $first_img = '';
     ob_start();
     ob_end_clean();
     $pattern = '/?src=(["\'])(.+?)\1.?>/i';
     $output = preg_match_all($pattern, $post->post_content, $matches);
if($output){  
$first_img = $matches[0][0];
 } 
if(empty($output)){  
 $first_img =  '<img src="'.get_template_directory_uri().'/images/noimg.jpg" alt="" class="">'; 
} 
return $first_img;
}

これで、表示がわに

<?php
if(has_post_thumbnail()){
    echo '<img src="' .the_post_thumbnail('blog').'" alt="" class="">';
}else{
$img = catch_that_image(); 
print_r($img);
};
?>

これで表示された。

 

 

関連記事

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

four × 1 =