Могу посоветовать вам использовать любую библиотеку для парсинга html-тегов. Например,
PHP Simple HTML DOM Parser
Вот самый простой способ получить все ссылки
$html = str_get_html( get_the_content() );
$links = $html->find( 'a' );
foreach ( $links as $key => $link ) {
var_dump( $link->href );
}
unset( $html );
Обернуть в шорткоды можно с помощью метода
$link->outertext = '[link]' . $link->outertext . '[/link]';
Сохранить получившийся контент нужно с помощью
wp_update_post()
В целом, возможно есть и более простые решения, возможно вам удастся нагуглить даже плагины под вашу задачу или хотя бы похожие. Например,
better search replace умеет менять все ссылки на сайте, а
no external links преобразует все внешние ссылки во внутренние