Как создать инструмент для массовой замены текстов в постах WordPress

В процессе работы с сайтом на WordPress часто возникает необходимость массово заменить какой-либо текст в публикациях. Например, поменять устаревшее название компании, исправить типографическую ошибку или обновить ссылки. В этой статье мы подробно разберём, как создать собственный инструмент для массовой замены текста в постах WordPress с помощью PHP и встроенных функций WP.

Почему важно создавать свой инструмент для массовой замены текста

В WordPress есть множество плагинов для поиска и замены в базе данных, но они могут быть избыточными, небезопасными или не учитывать особенности вашего сайта. Создавая собственный инструмент, вы получаете:

  • Контроль над процессом замены;
  • Возможность подстройки под уникальные требования;
  • Безопасность — обработка данных в рамках WP API;
  • Прозрачность и возможность доработки кода.

Далее мы рассмотрим пример реализации такого инструмента.

Создание базового функционала поиска и замены в постах

Для начала создадим функцию, которая будет искать и заменять текст в содержимом публикаций. Эта функция должна:

  1. Получать параметры: строку для поиска и строку для замены;
  2. Выбирать посты определённого типа (например, 'post');
  3. Обновлять содержимое поста, если найдена искомая строка.

Пример функции wordpresses_replace_text_in_posts():

function wordpresses_replace_text_in_posts($search, $replace, $post_type = 'post') {
    if (empty($search)) {
        return 'Строка для поиска не может быть пустой';
    }

    $args = [
        'post_type' => $post_type,
        'posts_per_page' => -1,
        'post_status' => 'any'
    ];

    $posts = get_posts($args);
    $updated_count = 0;

    foreach ($posts as $post) {
        if (strpos($post->post_content, $search) !== false) {
            $new_content = str_replace($search, $replace, $post->post_content);
            wp_update_post([
                'ID' => $post->ID,
                'post_content' => $new_content
            ]);
            $updated_count++;
        }
    }

    return "Обновлено записей: $updated_count";
}

Эта функция выбирает все посты указанного типа, проверяет наличие строки для поиска в содержимом и заменяет её. Результатом является количество обновлённых записей.

Как вызвать эту функцию безопасно

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

Пример добавления страницы в меню админки и обработки формы:

add_action('admin_menu', function() {
    add_submenu_page(
        'tools.php',
        'Массовая замена текста',
        'Массовая замена текста',
        'manage_options',
        'wordpresses-text-replace',
        'wordpresses_text_replace_page'
    );
});

function wordpresses_text_replace_page() {
    if (!current_user_can('manage_options')) {
        wp_die('Доступ запрещён');
    }

    $message = '';
    if (isset($_POST['search']) && isset($_POST['replace']) && check_admin_referer('wordpresses_text_replace_action')) {
        $search = sanitize_text_field($_POST['search']);
        $replace = sanitize_text_field($_POST['replace']);
        $message = wordpresses_replace_text_in_posts($search, $replace);
    }

    echo '<div class="wrap">';
    echo '<h1>Массовая замена текста в постах</h1>';

    if ($message) {
        echo '<div id="message" class="updated notice is-dismissible"><p>' . esc_html($message) . '</p></div>';
    }

    echo '<form method="post">';
    wp_nonce_field('wordpresses_text_replace_action');
    echo '<table class="form-table"><tbody>';
    echo '<tr><th scope="row"><label for="search">Текст для поиска</label></th><td><input name="search" type="text" id="search" class="regular-text" required></td></tr>';
    echo '<tr><th scope="row"><label for="replace">Текст для замены</label></th><td><input name="replace" type="text" id="replace" class="regular-text"></td></tr>';
    echo '</tbody></table>';
    submit_button('Заменить');
    echo '</form></div>';
}

Этот код добавит в меню «Инструменты» новую страницу с формой. Пользователь вводит строки для поиска и замены, и по нажатию кнопки запускается процесс.

Обработка больших объёмов данных и безопасность

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

  • Делать замены пакетами (например, по 50 постов за раз).
  • Использовать AJAX или WP-Cron для поэтапного выполнения.
  • Всегда делать резервную копию базы данных перед запуском массовых операций.
  • Проверять права доступа и nonce для защиты от CSRF.

Пример пакетной обработки с параметром $batch_size:

function wordpresses_replace_text_in_posts_batch($search, $replace, $post_type = 'post', $offset = 0, $batch_size = 50) {
    if (empty($search)) {
        return ['message' => 'Строка для поиска не может быть пустой', 'updated' => 0];
    }

    $args = [
        'post_type' => $post_type,
        'posts_per_page' => $batch_size,
        'offset' => $offset,
        'post_status' => 'any'
    ];

    $posts = get_posts($args);
    $updated_count = 0;

    foreach ($posts as $post) {
        if (strpos($post->post_content, $search) !== false) {
            $new_content = str_replace($search, $replace, $post->post_content);
            wp_update_post([
                'ID' => $post->ID,
                'post_content' => $new_content
            ]);
            $updated_count++;
        }
    }

    return ['message' => "Обработано записей с $offset по " . ($offset + count($posts) - 1), 'updated' => $updated_count, 'next_offset' => $offset + $batch_size, 'posts_count' => count($posts)];
}

Этот подход позволяет запускать замену частями, например, через AJAX, чтобы не нагружать сервер.

Использование готовых плагинов с расширенными возможностями

Если вы предпочитаете готовые решения или хотите более тонкую настройку, обратите внимание на следующие плагины:

  • Clearfy Pro — плагин для оптимизации и управления сайтом, включает инструменты для работы с контентом.
  • WPRemark — удобный инструмент для управления комментариями и контентом.

Однако, если нужна именно замена в постах, собственный скрипт часто бывает эффективнее и безопаснее.

Итоги и рекомендации

Создание собственного инструмента для массовой замены текста в WordPress — задача, решаемая с помощью нескольких функций и базовых знаний PHP и WP API. Главные моменты:

  • Всегда проверяйте параметры и права доступа.
  • Обрабатывайте данные пакетами для надежности.
  • Делайте резервное копирование перед изменениями.
  • Используйте nonce и capability проверки для безопасности.

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

WordPress: как сделать дедупликацию метаданных постов для ускорения сайта
01.02.2026
Как создать автоматический импорт постов в WordPress из Google Sheets
12.04.2026
Как добавить автоматическое сохранение постов через AJAX в WordPress
23.01.2026
Как создать внешний API для WordPress с поддержкой авторизации
23.12.2025
Как удалить или изменить атрибуты img в WordPress без плагинов
20.02.2026