TL;DR
//$strの中のhtmlタグに設定されていないURLをリンク化する関数
function convert_string_url_to_link($str){
$ptn = '/([^"])(https?:\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])([^"])/imu';
$rep = '$1<a href="$2" target="_blank" rel="nofollow">$2</a>$3';
$result = preg_replace($ptn, $rep, $str, -1);
if($result == null) return $str;
return $result;
}
//上記関数をthe_contenのfilterに設定
add_filter('the_content', 'convert_string_url_to_link');
特にエラー処理とかはしてないので、必要に応じて編集してください。
この記事を書いた理由
クライアントさんから「URLが勝手にリンクになったらいいなー」のお声。
エディタ側でリンクにしてください。で一蹴しないのが弊社のホスピタリティ。
コードの説明
まずは文章中のURLをaタグで囲む関数を作りましょう。
URLは正規表現で取得し、置換取得したURLを置換してaタグ内に入れるようにします。
今回、大体は外部リンクになるかなーって思ったので、とりあえず外部リンクにになるようにtarget属性も設定しました。
後は、the_contentのフィルターとして設定すれば完了です。
蛇足
関数化することで、単体でも利用可能なので、カスタムフィールドに入力された文章中のURLも変換できます。
$str = get_field('hoge');
echo convert_string_url_to_link($str);