Во внутреннем цикле, который заменяет текст в содержимом, вы всегда начинаете с исходного текста ($content
) и возвращаете новую строку ($preg_replace
) ...
$preg_replace = preg_replace('/\b'.preg_quote($word, '/').'\b/', '<a href="' . $link . '" target="_blank">' . $word . '</a>', $content, 1);
Вместо этого вы должны поместить результат обратно в исходное содержимое, чтобы следующий цикл добавлял к заменам, а не получал новую строку (поэтому поместите новое значение обратно в $content
) ...
$content = preg_replace('/\b'.preg_quote($word, '/').'\b/',
'<a href="' . $link . '" target="_blank">' . $word . '</a>',
$content, 1);
и затем вернуть это значение (вы всегда можете вернуть $content
...
return $content;