Перейти к содержимому



Убрать пробелы из таблицы в базе данных wordpress

#1 Sosnovskij

Sosnovskij
  • Администратор
  • 3 883 сообщений
  • Репутация: 565
0

Отправлено 13 Сентябрь 2013 - 13:46

Проблема значит следующая :). В некоторых постах сайта содержится несколько пробелов между словами вместо обычного одного. Можно ли убрать эти пробелы? Их обычно содержится 2 вместо 1, но бывает попадаются и 3, и 4, и 5 и так до где-то 10. Образовывались они неизвестным для меня методом :D.

CMS wordpress, имя таблицы wp_posts. Можно ли через phpmyadmin sql-запросом заменить эти многочисленные пробелы стандартным одним? Если да, то, соответственно, каким <_< . Не сможет ли это затронуть функциональность вывода постов. Грубо говоря, не нарушит это что-либо?

 

 

  • 0

Не стесняйтесь ставить оценки темам :) Правила форума. Мой блог http://sosnovskij.ru/.



#2 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 13 Сентябрь 2013 - 14:29

UPDATE `table`
SET `field` = REPLACE(`field`, '  ', ' ');
Так как в мускуле нету поддержки регулярок при замене, то придется выполнять этот запрос до тех пор, пока он не вернет ноль строк. Можно написать на пхп цикл.
А еще можно сделать дамп, открыть его в нотпаде и заменить по регулярке.
  • 1
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#3 Sosnovskij

Sosnovskij
    Topic Starter
  • Администратор
  • 3 883 сообщений
  • Репутация: 565

Отправлено 10 Октябрь 2013 - 15:10

Лучше поздно, чем никогда :) Затянулось у меня с этим.

UPDATE `table`
SET `field` = REPLACE(`field`, '  ', ' ');


table - это название таблицы? В данном случае wp_posts
field - это поле? В данном случае post_content

Итого конечный запрос будет

UPDATE 'wp_posts'
SET `post_content` = REPLACE('post_content', '  ', ' ');

Верно? :)
  • 0

Не стесняйтесь ставить оценки темам :) Правила форума. Мой блог http://sosnovskij.ru/.



#4 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 11 Октябрь 2013 - 23:49

Данный вариант уберет "3 пробела" на 1.
Тебе проще добавить хук на the_content который будет уже соответственно убирать пробелы тем же preg_replace, и если были замены обновлять данные в БД.
Могу помочь если хочешь :)

Но здесь может стать проблема в том, как ты вообще выводишь контент...
Используешь ли ты в теме функцию the_content, как ты ее используешь - в лупе, или нет... бо в данной функции используется хук без данных об ID поста и т.д.
С другой стороны, можно написать плагинчик на будущее, который будет перебирать все посты и делать замену регулярными выражениями...
  • 0

#5 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 12 Октябрь 2013 - 01:17

Подумал подумал.. и придумал...

Ситуация такова... в the_content функции, на выходе используется фильтр соответственно the_content... в который уже попадает обработанный контент поста соответственно... и нету упоминаний в аргументах о самом объекте поста...
Контент для этой функции генерит get_the_content... в ней да, есть все что нам надо, но разработчики не придумали использование хотя бы одного фильтра в данной функции, кроме обработки "тизера" ... НО если не указан ID или WP_Post в аргументах, то он берет его из глобала.. в который записываются данные во время WP_Loop.. следовательно мы можем просто повесить триггер на тот-же the_content и забирать с глобала объект WP_Post и над ним уже проводить свои грязные махинации :) Но тут тоже беда получится.. если ты используешь the_content($some_post->post_content) вне лупа, то на пост, получается наш триггер не сработает...

Собственно надо еще подумать...
  • 1

#6 fedornabilkin

fedornabilkin
  • Пользователь
  • 696 сообщений
  • Репутация: 91

Отправлено 15 Октябрь 2013 - 09:08

Данный вариант уберет "3 пробела" на 1.

Если через запрос к бд, то надо именно заменять два пробела на один.
Если было 7 пробелов, сделали запрос - получилось 5 + (2 заменили на 1) = 6.
Итого с каждым проходом и выполнением запроса убирается один лишний пробел до тех пор, пока не останется один пробел.
Мне кажется меньше мороки :)
  • 0
Как часто в горестной разлуке,В моей блуждающей судьбе, ФО, я думал о тебе.


#7 Sosnovskij

Sosnovskij
    Topic Starter
  • Администратор
  • 3 883 сообщений
  • Репутация: 565

Отправлено 15 Октябрь 2013 - 14:29

c0ns0l3, мне в принципе 1 раз это нужно сделать и все, поэтому предпочтительнее вариант попроще :)

fedornabilkin,
В окне sql запроса выполнил это

UPDATE 'wp_posts'
SET 'post_content' = REPLACE('post_content', '  ', ' ')

Вылезла ошибка

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''wp_posts' SET 'post_content' = REPLACE('post_content', ' ', ' ')' at line 1

  • 0

Не стесняйтесь ставить оценки темам :) Правила форума. Мой блог http://sosnovskij.ru/.



#8 matroskin8

matroskin8
  • Пользователь PRO
  • 767 сообщений
  • Репутация: 143

Отправлено 15 Октябрь 2013 - 15:00

В окне sql запроса выполнил это

UPDATE 'wp_posts'
SET 'post_content' = REPLACE('post_content', '  ', ' ')

Вылезла ошибка...

Попробуйте заменить одинарные кавычки - ', которыми обрамлены имена поля и таблицы, на обратные кавычки - `:
UPDATE `wp_posts`
SET `post_content` = REPLACE(`post_content`, '  ', ' ')

  • 0


#9 Sosnovskij

Sosnovskij
    Topic Starter
  • Администратор
  • 3 883 сообщений
  • Репутация: 565

Отправлено 15 Октябрь 2013 - 18:35

matroskin8, поменял на обратные кавычки. Процесс пошел, но завис, а сайт стал выдавать "error establishing a database connection". Перезагрузил сервер. Посты, в которых были двойные пробелы заменились полностью на текст "post_content". Сейчас восстановил бэкап БД.
  • 0

Не стесняйтесь ставить оценки темам :) Правила форума. Мой блог http://sosnovskij.ru/.



#10 c0ns0l3

c0ns0l3
  • Пользователь
  • 264 сообщений
  • Репутация: 49

Отправлено 15 Октябрь 2013 - 19:35

UPDATE `wp_posts` posts
SET posts.`post_content` = REPLACE(posts.`post_content`, '  ', ' ') WHERE 1 =1
Давай так попробуем..

Хотя, у меня все получилось и так...
Снимок.PNG
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru