Мне не понятен смысл. В исходном варианте удаляются все ссылки из контента, в вашем варианте только перечисленные в
$links_mass
.
Да и кстати вы обновляете пост столько раз сколько у вас ссылок, достаточно 1 раз:
function links_remove () {
$args = array ('numberposts' => 9999);
$allposts = get_posts( $args );
foreach( $allposts as $post ) {
$id = $post->ID;
$content = $post->post_content;
$links_mass=array(/*Сотни ссылок через запятую*/);
foreach($links_mass as $link) {
$pattern = '/<a href="'/.$link./'" (.+?)>|<\/a>/'; /* тут вся проблема*/
$new_content = preg_replace ($pattern, '', $content);
}
$new_post = array();
$new_post['ID'] = $id;
$new_post['post_content'] = $new_content;
wp_update_post( $new_post );
}
}
И саму ссылку нужно привести к строке в регулярном выражении, потому что некоторые символы из ссылки могут быть восприняты как спецсимволы. Не забывайте экранировать ссылки функцией
preg_quote()
Регулярное выражение заданное вами - недостаточно гибкое. Атрибут
href
может быть не только самым первым атрибутом в теге
<a>
и после него может отсутствовать пробел.