Поддержка Проблемы и решения Регулярные выражения

  • Здравствуйте.
    Подскажите, как осуществить обработку поста с помощью регулярных выражений, чтобы обработка происходила на автомате. Допустим добавляются посты с помощью плагина через rss, и задача состоит в том, чтобы все посты прошли, через обработку с помощью регулярки.

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Модератор Yuri

    (@yube)

    В общем случае https://codex.wordpress.org/Plugin_API/Action_Reference/save_post
    В частном — надо смотреть код плагина. Там может быть что угодно, вплоть до прямой записи в базу.

    А допустим если пост, записался в базу и сразу,там уже обработать регуляркой, опять же на автомате.Просто не особо силен в программировании, а по ссылке, не особо понятно, куда что вставлять, и вообще как применить.

    Модератор Yuri

    (@yube)

    А допустим если пост, записался в базу и сразу,там уже обработать регуляркой, опять же на автомате.

    Средствами 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, но выдает ошибку, подскажите

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Но он заменяет только простой текст, вставлял функцию регулярки вместо replace_text, но выдает ошибку, подскажите

    Видимо, Вам нужна функция preg_replace.

    Вставляю, ошибка получается:

    function preg_replace($text) {
    $text = str_replace(‘[0-9]+’, ‘ррррр’, $text);
    return $text;
    }
    add_filter(‘the_content’, ‘replace_text’);

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    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');

    Модератор Yuri

    (@yube)

    function preg_replace

    Может все-таки replace_text?

    Совет: избегайте «банальных» имен функций — они могут быть уже заняты.

    Модератор Yuri

    (@yube)

    str_replace('/[0-9]+/'

    str_replace понимает регэкспы?

    Модератор Denis Yanchevskiy

    (@denisco)

    WordPress-разработчик, denisco.pro

    Может все-таки 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’

    Модератор Yuri

    (@yube)

    Если используете слеш как ограничитель регулярки ('/ /'), то все слеши внутри (</p>) необходимо экранировать (<\/p>), иначе первый же воспринимается как конец рег.выражения, а то, что за ним, как модификатор.

    Спасибо работает.
    Еще вопрос, как мне вставлять в текст, допустим в середину поста, или после определенного абзаца, рандом примерно такого вида <p>{|||}</p>, чтобы можно использовать html код.
    Или допустим есть текстовый документ, который лежит в папке с шаблоном, и название папки text. И из файла рандомно бралась строка, и вставлялась в середину поста

Просмотр 13 ответов — с 1 по 13 (всего 13)
  • Тема «Регулярные выражения» закрыта для новых ответов.