Заменяем в записях все вхождения указанного текста
Представим, что перед нами стоит задача во всех записях WordPress-блога разом выделить определенное слово жирным или поставить на какое-то слово или словосочетание ссылку.
Редактировать в таком случае каждый пост будет очень нелогично и затратно по времени.
Задача решается очень простым образом – путем использования простейшей PHP-функции для замены текста:
function replace_text($text) {
$text = str_replace('WordPress', '<strong>WordPress</strong>', $text);
$text = str_replace('WordPress хаки', '<a href="#">WordPress хаки</a>', $text);
return $text;
}
add_filter('the_content', 'replace_text');
Эту функцию необходимо поместить в файл functions.php вашего шаблона.
В вышеуказанной функции я показал пример: все вхождения слова “WordPress” будут выделены жирным, а все вхождения словосочетания “WordPress хаки” превратятся в ссылку.
По аналогии можно делать одновременно сколько угодно таких замен.
Imho, проще сделать дамп и пробежаться по нему автозаменой
Лично мне будет не проще.
ну это по уже готовому содержимому, а если нужно что бы выделялось во всем содержимом?
Проще будет конечно добавить эту функцию, но лучше автозамену в дампе БД сделать, времени займет чуток побольше, конечно если база не 30 метров.
Блог супер, подписался на РСС.
Хотелось бы что бы в следующих статьях вы затронули тему таксономии, в том числе и для 3 версии WP. Интересно очень как создавать на WP каталоги чего-нибудь, к примеру каталог организаций или вакансий.
подскажите, как выкрасить в красный цвет.
понимаю, что вопрос сверхламерский, но мне проще задать, чем день в поисках проводить.
итак, я хочу сделать одну букву на сайте жирным красным. скажем, это буква “я”.
и вопрос еще, для каждого регистра отдельно прописывать нужно?
заранее благодарю
Строка замены будет такой:
$text = str_replace('я', '<strong style="color:red">я</strong>', $text);Да.
спасибо
Есть глупый вопрос..
А оно в комментах тоже заменит?
Нет, конечно. В заголовке же написано: “в записях”.
Спасибо за интересный хак, забрал себе! Такой вопрос. Есть ли возможность поставить ограничение на кол-во ссылок с одного поста. Пример: мы хотим залинковать словосочетание “чебурашка молодец”, а в посте оно три раза употребляется. Три ссылки с одинаковым анкором на одной странице выглядит перебором, мне так кажется. Как можно сделать 1 ссылку, а другие оставить как есть?
Скорее всего можно, но я не знаю, как.
Еще такой вопрос вдогонку к первому. Можно ли сделать так чтобы не учитывался регистр? Получается что “чебурашка молодец” перелинковывается , а “Чебурашка молодец” уже не хочет.
Просто добавьте в функцию оба варианта.
Возникла проблема с картинками. Когда заменяю слово ссылкой, если это слово присутствует в описании картинки, картинка исчезает, а вместо нее в статье появляется код ссылки на эту картинку. Как это исправить?
Не представляю, как.
Тогда Ваша функция бесполезна, проще все же внести изменения в БД.
А потом, когда изменения будут внесены, функцию можно удалить? Или после её удаления всё вернётся на круги своя?
Нельзя, иначе всё вернётся на круги своя.
:( Тогда, к сожалению, мне это не подходит..
Димокс, а нет ли возможности массовых изменений в постах? Понимаете, нужно менять много чего и много где.. и если для каждого изменения заводить функцию, да чтоб она висела постоянно.. не комильфо, имхо..
Такие вещи делаются через phpMyAdmin, но я в этом не разбираюсь.
Прошу прощения, за то, что поднимаю настолько старую тему, но есть такой вопрос.
Хочу с помощью этой функции сделать так, что бы все слова которые начинаются с знака @ автоматически становились ссылками на твиттер аккаунт.
Как сделать так, что бы функция меняла @(набор знаков) на @(набор знаков)〱/а>
Надеюсь, удалось объяснить, что я хочу.
Строка замены будет такой:
$text = preg_replace('#@([A-Za-z0-9_]+)#', '<a href="http://twitter.com/#!/$1">@$1</a>', $text);огромное спасибо.
всё получилось и работает
я только добавил пробел перед @, что бы с e-mail адресами проблем не было и rel=”nofollow”, что бы Google не сильно напрягался по поводу количество внешних ссылок