При создании или редактировании в 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()
Функция извлекает часть заголовка после перевода строки или возврата каретки.
Обязательно замените перед запуском запроса 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 не содержат нежелательных переводов строк и возвратов каретки, сохраняя ваш сайт последовательным и чистым.