Было задание убрать из материалов на одном сайте ссылки, подписанные определённым словом. Вот, есть, скажем, 1200 записей на сайте и в каждой из них стоит в конце ссылка на источник, подписанная словом “Источник”. Все эти ссылки нужно удалить.
На скорую руку был написан PHP-скрипт и успешно протестирован. “На скорую руку” – это значит, что он далеко не идеален. За него меня бы “заминусловали” где-нибудь на Хабрахабре, но в умелых руках он сделает своё дело.
Файл clear.php
<?php header('Content-type: text/html; charset=utf-8'); $link = mysqli_connect('localhost', 'dbuser', 'dbpassword', 'db'); //надеюсь, не нужно пояснять, что в dbuser, dbpassword и db нужно //поставить свои значения пользователя базы данных, его пароля и //название самой БД соответственно if (!$link) { printf("Невозможно подключиться к базе данных. Код ошибки: %s\n", mysqli_connect_error()); exit; } mysqli_set_charset($link, "utf8"); $post = array(); // массив с содержанием записей if ( $result = mysqli_query( $link, "SELECT * FROM wp_posts WHERE post_status = 'publish' AND post_content LIKE '%>Источник<%';" ) ) { // вместо Источник можно поставить своё слово. Слово-ссылку, // которое надо удалять из каждой записи while ($row = mysqli_fetch_assoc($result)) { $string = $row['post_content']; $res = sprintf(preg_replace('/<a href="(.*?)">Источник<\/a>/', "\\2", $string)); // удаляем слово ссылку из временной записи $post[] .= $res; // заносим в массив содержание записи уже без ссылки $sql = mysqli_query($link,"UPDATE wp_posts SET post_content = '".mysqli_real_escape_string($link,$res)."' WHERE ID = {$row['ID']};") or die(mysqli_error($link)); // а здесь уже временная запись без слова-ссылки превращется // в настоящую запись } mysqli_free_result($result); } mysqli_close($link); var_dump($post); // выводим массив исправленных записей на экран ?>
Как всегда, вопросы и предложения – в комментарии к записи. Буду рад замечаниям и советам.
die – facepalm
preg_replace не для html – http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454
Так работает же ;) каждый код совершенствуется. Для того и написано, что сделано на “скорую руку”))