為文章圖片自動添加alt和title屬性(有完美判斷)

網上有許多自動添加 alt 和 title 屬性的代碼,但是都並不完美,總有一些小問題。例如出現空白 alt 或 title 屬性,或者出現重複 alt 或 title 屬性。

下面是我自己在用的代碼,能完美判斷圖片是否已有 alt 和 title 屬性。如果有就保留,如果沒有或者是空的就自動添加。代碼如下,在主題的 functions.php 中添加即可:

function wpface_image_alt_title($content) {
	global $post;
	$alt_title = $post->post_title;
	preg_match_all('/<img(.*?)src=(\'|\")(.*?)\.(bmp|gif|jpeg|jpg|png)(\'|\")(.*?)>/i', $content, $matches);
	if($matches) {
		foreach($matches[0] as $val) {
			$place_content = $val;
			//先把空白 alt 和 title 屬性清理掉
			$place_content = str_replace(' alt ', ' ', $place_content);
			$place_content = str_replace(' alt=""', '', $place_content);
			$place_content = str_replace(' title ', ' ', $place_content);
			$place_content = str_replace(' title=""', '', $place_content);
			//如果想覆蓋原來的 alt 或 title 屬性,就把下面兩句的注釋取消
			//$place_content = preg_replace('/ alt="(.*?)"/', '', $place_content);
			//$place_content = preg_replace('/ title="(.*?)"/', '', $place_content);
			//判斷如果沒有 alt 或 title 屬性就用文章標題添加
			if(strpos($place_content,'alt=')===false) {
				$place_content = str_replace("/>", "", $place_content).' alt="'.$alt_title.'"/>';
			}
			if(strpos($place_content,'title=')===false) {
				$place_content = str_replace("/>", "", $place_content).' title="'.$alt_title.'"/>';
			}
			//替換 img 標籤
			$content = str_replace($val, $place_content, $content);
		}
	}
	return $content;
}
add_filter('the_content','wpface_image_alt_title');

代碼的思路是這樣的:

  1. 通過正則匹配提取文章中所有圖片標籤,然後循環替換每條標籤,並賦值到變數 $place_content
  2. 處理 $place_content,先把空白 alt 和 title 屬性清理掉
  3. 判斷是否存在 alt 或 title 屬性,沒有就添加
  4. 用處理後的 $place_content,替換文章中匹配到的 img 標籤