<?php if ( !defined( 'ABSPATH' ) ) exit;//PHPの宣言と直接アクセスの拒否

/*******************************************************************************/
/* 動作しなくなったら、正規表現パターンが画像タグとあっているかを確認すること      */
/*******************************************************************************/

function haup_add_title_attribute_to_image_tag($content) {
// 画像の正規表現パターン
	$pattern = '/<img(.*?)src="(.*?)"(.*?)alt="(.*?)"(.*?)>/';

// コンテンツ内の画像を取得
// PREG_SET_ORDER パターンから取得した情報(.*?)を順に配列へ格納
	preg_match_all($pattern, $content, $matches, PREG_SET_ORDER);

//ページ内の画像分だけ処理を繰り返す
	foreach ($matches as $match) {
		$srcValue = $match[2];//URL
		$altValue = $match[4];//alt属性で出力されている内容
		$cleaned_url = preg_replace('/-\d+x\d+/', '', $srcValue);//URLからサイズ情報を除去
		$id= attachment_url_to_postid($cleaned_url);//URLからIDを取得
		$description = get_post_field('post_excerpt', $id);//メディアのキャプションの値を取得
		$post_title = get_the_title();//ページのタイトルを取得

		if(!empty($description)){//メディアのキャプションがあるか
			$setumei = $description;
		}elseif(!empty($altValue)){//出力されているaltの値があるか
			$setumei = $altValue;
		}else{//どちらもなければページのタイトル
			$setumei = $post_title;
		}

// 画像タグのalt属性の後にtitle属性を追加する
	//出力するパターン
	$replacement = '<img' . $match[1] . 'src="' . $srcValue . '"' . $match[3] . 'alt="' . $altValue . '" title="' . $setumei . '"' . $match[5] . '>';
	//入れ替える
	$content = str_replace($match[0], $replacement, $content);
    }

	return $content;
}
add_filter('the_content', 'haup_add_title_attribute_to_image_tag');