Поддержка → Проблемы и решения → Регулярные выражения
Регулярные выражения
-
Здравствуйте.
Подскажите, как осуществить обработку поста с помощью регулярных выражений, чтобы обработка происходила на автомате. Допустим добавляются посты с помощью плагина через rss, и задача состоит в том, чтобы все посты прошли, через обработку с помощью регулярки.
-
В общем случае https://codex.wordpress.org/Plugin_API/Action_Reference/save_post
В частном — надо смотреть код плагина. Там может быть что угодно, вплоть до прямой записи в базу.А допустим если пост, записался в базу и сразу,там уже обработать регуляркой, опять же на автомате.Просто не особо силен в программировании, а по ссылке, не особо понятно, куда что вставлять, и вообще как применить.
А допустим если пост, записался в базу и сразу,там уже обработать регуляркой, опять же на автомате.
Средствами mysql? Говорят, можно. Но я бы не взялся — квалификации не хватает.
не особо понятно, куда что вставлять, и вообще как применить.
Обработчики обычно вставляют в functions.php Темы либо оформляют отдельным плагином. Второй способ предпочтительней, если обработка относится скорее к данным, чем к выводу. Но это дело вкуса.
В вашем случае в обработчике нужно сделать проверку на принадлежность поста к импортированным и если да, то применить к нему вышеупомянутую регулярку. Возможно, выставить «флаг», чтобы избежать многократной обработки.
Просто не особо силен в программировании
А тут «особо» и не требуется. По моей шкале сложности это 5 из 10.
Да, я тут подумал, возможно, в вашем случае лучше и проще использовать фильтр на хуке wp_insert_post_data. https://codex.wordpress.org/Plugin_API/Filter_Reference/wp_insert_post_data
Нашел код
function replace_text($text) {
$text = str_replace(‘Поисковая оптимизация’, ‘Поисковая оптимизация‘, $text);
$text = str_replace(‘оптимизация WordPress’, ‘оптимизация WordPress‘, $text);
return $text;
}
add_filter(‘the_content’, ‘replace_text’);Но он заменяет только простой текст, вставлял функцию регулярки вместо replace_text, но выдает ошибку, подскажите
Но он заменяет только простой текст, вставлял функцию регулярки вместо replace_text, но выдает ошибку, подскажите
Видимо, Вам нужна функция preg_replace.
Вставляю, ошибка получается:
function preg_replace($text) {
$text = str_replace(‘[0-9]+’, ‘ррррр’, $text);
return $text;
}
add_filter(‘the_content’, ‘replace_text’);1. На странице, ссылку на которую я Вам дал, есть примеры использования функции, зачем Вы их игнорируете?
$text = preg_replace('/[0-9]+/', 'ррррр', $text);
2. Какая ошибка возникает?function replace_text($text) { $text = preg_replace('/[0-9]+/', 'ррррр', $text); return $text; } add_filter('the_content', 'replace_text');
function preg_replace
Может все-таки replace_text?
Совет: избегайте «банальных» имен функций — они могут быть уже заняты.
str_replace('/[0-9]+/'
str_replace понимает регэкспы?
Может все-таки replace_text?
В голову не пришло, что мой ответ можно так интерпретировать %)
str_replace понимает регэкспы?
Нет, поэтому я и указал на другую функцию в своём ответе. А это просто очепятка 😉
Скорректировал своё сообщение.
Спасибо парни за совет, работают регулярки кроме нужной, вот пример
function replace_text($text) { $text = preg_replace('/^<p(.*?)</p>(.*?)</p>(.*?)</p>(.*?)</p>(.*?)</p>(.{145,450})</p>(.*?)$/', '<p$1</p>$2</p>$3</p>$4</p>$5</p><blockquote>$6</blockquote>$7', $text); return $text; } add_filter('the_content', 'replace_text');
При вставке выдает ошибку
Invalid regular expression: Unknown modifier ‘p’Если используете слеш как ограничитель регулярки (
'/ /'
), то все слеши внутри (</p>
) необходимо экранировать (<\/p>
), иначе первый же воспринимается как конец рег.выражения, а то, что за ним, как модификатор.Спасибо работает.
Еще вопрос, как мне вставлять в текст, допустим в середину поста, или после определенного абзаца, рандом примерно такого вида <p>{|||}</p>, чтобы можно использовать html код.
Или допустим есть текстовый документ, который лежит в папке с шаблоном, и название папки text. И из файла рандомно бралась строка, и вставлялась в середину поста
- Тема «Регулярные выражения» закрыта для новых ответов.