При создании или редактировании в WordPress вы могли столкнуться с переводом строки или возвратом каретки в заголовках сообщений. Эти дополнительные символы могут вызвать проблемы с форматированием и сделать заголовки непоследовательными. В этой статье я расскажу о двух методах удаления перевода строки и возврата каретки из заголовков сообщений WordPress: решение MySQL для исправления ранее написанных заголовков и функция PHP для предотвращения возникновения проблемы в будущем.

Способ 1: решение MySQL для заранее написанных имен

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

UPDATE wp_posts
SET post_title = REGEXP_REPLACE(post_title, '(\\w)\\r?\\n(\\w)', '$1 $2')
WHERE post_status="publish";

Запрос MySQL, представленный в статье, использует REGEXP_REPLACE() функция доступна в MySQL 8.0 и более поздних версиях. Следовательно, чтобы использовать решение MySQL как есть, на вашем сервере должен быть установлен MySQL 8.0 или более поздняя версия.

  • UPDATE оператор используется для изменения данных wp_posts стол.
  • SET Предложение указывает столбец, который мы хотим обновить, то есть post_title.
  • Мы используем REGEXP_REPLACE() функция для выполнения замены регулярного выражения post_title столбец. Эта функция доступна в MySQL 8.0 и более поздних версиях.
  • Шаблон регулярного выражения '(\\w)\\r?\\n(\\w)' соответствует символу слова, за которым следует необязательный возврат каретки, перевод строки и другой символ. Двойная косая черта используется для экранирования обратной косой черты в запросе MySQL.
  • Модель на замену '$1 $2' заменяет соответствующий шаблон захваченными символами слова, разделенными пробелом.
  • WHERE Предложение фильтрует строки, чтобы обновить только заголовки сообщений, в которых post_status «опубликовать». Настройте это условие, если вы хотите включать черновики и другие статусы публикаций.

Если вы используете более старую версию MySQL (до 8.0), вы можете добиться аналогичного результата, используя комбинацию REGEXP_SUBSTR() и CONCAT() вместо функции. Вот альтернативный запрос, который работает со старыми версиями MySQL:

UPDATE wp_posts
SET post_title = CONCAT(
    REGEXP_SUBSTR(post_title, '^[^\\r\\n]+'),
    IF(REGEXP_SUBSTR(post_title, '\\r?\\n'), ' ', ''),
    REGEXP_SUBSTR(post_title, '[^\\r\\n]+$')
)
WHERE post_status="publish";

Объяснение:

  • CONCAT() Функция используется для соединения частей заголовка сообщения.
  • Первый REGEXP_SUBSTR() Функция извлекает часть заголовка перед переводом строки или возвратом каретки.
  • IF() функция проверяет наличие перевода строки или возврата каретки в имени. Если он найден, добавляется пробел; в противном случае он добавляет пустую строку.
  • Второй REGEXP_SUBSTR() Функция извлекает часть заголовка после перевода строки или возврата каретки.
ЧИТАТЬ  На SEOnews стартовал Рейтинг известности SEO-компаний 2024

Обязательно замените перед запуском запроса wp_posts с вашим фактическим именем таблицы сообщений WordPress и на всякий случай создайте резервную копию вашей базы данных.

Способ 2. Функция дочерней темы для предотвращения будущих событий.

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


functions.php файл. Вот функция:

function remove_line_feeds_from_post_title($data, $postarr) {
    if (isset($data['post_title'])) {
        $data['post_title'] = preg_replace('/(\w)\r?\n(\w)/', '$1 $2', $data['post_title']);
    }
    return $data;
}
add_filter('wp_insert_post_data', 'remove_line_feeds_from_post_title', 10, 2);

Объяснение:

  • Функция называется remove_line_feeds_from_post_title и принимает два параметра: $data (массив почтовых данных) и $postarr (необработанные почтовые данные).
  • В функции мы проверяем, есть ли post_title ключ существует $data массив с использованием isset() функция.
  • Да post_title ключ существует, мы используем preg_replace() функция для замены любых переводов строк или возврата каретки между символами слова пробелом.
  • Шаблон регулярного выражения '/(\w)\r?\n(\w)/' соответствует символу слова, за которым следует необязательный возврат каретки и перевод строки, а затем еще один символ слова.
  • Модель на замену '$1 $2' заменяет соответствующий шаблон захваченными символами слова, разделенными пробелом.
  • Наконец, мы возвращаем измененный $data множество.
  • Мы используем add_filter() функция для подключения нашей пользовательской функции к wp_insert_post_data фильтр, который активируется перед вставкой данных сообщения в базу данных.

Благодаря этой функции всякий раз, когда сообщение сохраняется или обновляется, любые переводы строк или возвраты каретки в заголовке сообщения будут автоматически удалены или заменены пробелами перед сохранением в базе данных.

Используя запрос MySQL для исправления существующих заголовков сообщений и добавляя функцию PHP в свою дочернюю тему, вы можете гарантировать, что заголовки ваших сообщений WordPress не содержат нежелательных переводов строк и возвратов каретки, сохраняя ваш сайт последовательным и чистым.

ЧИТАТЬ  Trafft: Покажите клиентам свои услуги, расписание и доступность, чтобы записаться на прием | зона Мартех

Source