Было задание убрать из материалов на одном сайте ссылки, подписанные определённым словом. Вот, есть, скажем, 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
Так работает же ;) каждый код совершенствуется. Для того и написано, что сделано на “скорую руку”))