Есть около тысячи ссылок, которые необходимо удалить из wordpress не затрагивая текст ссылки. Есть такой код, который подсказали на другом ресурсе, но он работает неверно. Вставляется в functions.php для единичного прогона.
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(
/*
Здесь сотни абсолютно разных ссылок через запятую
*/
'site.com'
);
foreach($links_mass as $link) {
$_ = str_replace($links_mass, '', $content);
$new_content = preg_replace('~<a\s*href="">([^<]+)<\/a>~', "$1", $_);
$new_post = array();
$new_post['ID'] = $id;
$new_post['post_content'] = $new_content;
wp_update_post( $new_post );
}
}
}
add_action ('init', 'links_remove');
Он находит и "удаляет" ссылки только на той страничке которую я загружаю в данный момент. Т.е. если это главная, то там он ничего не удалит или если пост, который не имеет ссылок из массива, то тоже ничего не изменится. А если это пост в котором есть ссылки из массива, то ссылка становится вида :
<a href="http://">Сайт</a>