Jump to content

Удаление старых записей в Wordpress


Recommended Posts

Всем Привет! Вопрос знатокам WordPress и MySQL
Для удаления старых записей через запрос к MySQL, собрал вот это:
 

DELETE p,m,r FROM wp_posts p LEFT JOIN wp_postmeta m ON (p.ID = m.post_id) LEFT JOIN wp_term_relationships r ON (p.ID = r.object_id) WHERE p.post_date < '2016-02-12' AND p.post_type = 'post' AND p.post_status = 'publish'

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

Link to post
Share on other sites

Есть вопрос? Задай его профессиональным веб-мастерам, SEO и другим специалистам!

  • VIP

Привет. Сразу код дать не могу, с телефона пишут. Если вкратце, что используйте запрос с помощью wpdb:

$wpdb->query(" ВАШ ЗАПРОС ");

Только дату подставляете, как переменную (текущая минус 20 дней). Создаете страницу в админке, при заходе на неё - происходит этот запрос. Ну а лучше по клику кнопки определенной  :)

Link to post
Share on other sites
  • VIP

Об этом поподробнее.

 

Что-то хотел Вам плагин написать, но умная мысль меня остановила. В репозитории полно ж плагинов, скорее всего Вы не один такое хотите. И правда. К примеру, плагин Bulk Delete умеет удалять любые данные по разным критериям, в том числе и по "старости", судя по скриншотам. А также поддерживает расписание. То есть поставили "каждый день" чистить старые посты и забыли про это.

Link to post
Share on other sites

Всем Привет! Вопрос знатокам WordPress и MySQL

Для удаления старых записей через запрос к MySQL, собрал вот это:

 

DELETE p,m,r FROM wp_posts p LEFT JOIN wp_postmeta m ON (p.ID = m.post_id) LEFT JOIN wp_term_relationships r ON (p.ID = r.object_id) WHERE p.post_date < '2016-02-12' AND p.post_type = 'post' AND p.post_status = 'publish'

 

Вроде работает, но каждый раз приходится менять дату.

Можно как то сделать, что бы удалялись записи, к примеру старше 20 дней, без привязки к конкретной дате?

 

Привет. Сразу код дать не могу, с телефона пишут. Если вкратце, что используйте запрос с помощью wpdb:

$wpdb->query(" ВАШ ЗАПРОС ");

Только дату подставляете, как переменную (текущая минус 20 дней). Создаете страницу в админке, при заходе на неё - происходит этот запрос. Ну а лучше по клику кнопки определенной  :)

Чего у вас аватарки одинаковые? подумал что сам с собой разговаривает ТС. только потом присмотрелся.

Link to post
Share on other sites

Что-то хотел Вам плагин написать, но умная мысль меня остановила. В репозитории полно ж плагинов, скорее всего Вы не один такое хотите. И правда. К примеру, плагин Bulk Delete умеет удалять любые данные по разным критериям, в том числе и по "старости", судя по скриншотам. А также поддерживает расписание. То есть поставили "каждый день" чистить старые посты и забыли про это.

 

Перепробовал десятки плагинов, единственный который работает TIEexpire Automated Post Expiry. В Bulk Delete - данная функция доступна только в про версии и дело даже не в 15 $.

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

 

Вопрос решил с помощью функции DATE_SUB()

Всем спасибо!!!

Edited by Crack_key
Link to post
Share on other sites
  • VIP

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

Так бы сразу и сказали :-) Я ж попытался найти самый простой способ, дабы не изобретать велик. Кстати, Ваш запрос не учитывает удаления комментариев к материалу, если они есть, конечно же.

Link to post
Share on other sites

Так бы сразу и сказали :-) Я ж попытался найти самый простой способ, дабы не изобретать велик. Кстати, Ваш запрос не учитывает удаления комментариев к материалу, если они есть, конечно же.

Есть или нет, но это нужно делать. Сделал, если не сложно проверьте:

DELETE p,m,r,c,v FROM wp_posts p LEFT JOIN wp_postmeta m ON (p.ID = m.post_id) LEFT JOIN wp_term_relationships r ON (p.ID = r.object_id) LEFT JOIN wp_comments c ON (p.ID = c.comment_post_ID) LEFT JOIN wp_commentmeta v ON (p.ID = c.comment_post_ID AND c.comment_ID = v.comment_id) WHERE p.post_date < DATE_SUB(NOW(), INTERVAL 100 DAY) AND p.post_type = 'post' AND p.post_status = 'publish'
Link to post
Share on other sites
  • VIP

А какой смысл указывать post_status = 'publish'? Если человек решит отредактировать то, что отпарсено, то у него на автомате создаться post_status = 'revision' в дополнение к publish. Не могу понять, почему Вы не используете нативные функции самого движка. К примеру, собрать по нужным критериям посты get_posts() + класс WP_Date_Query{} для уточнения запроса по времени, затем полученные данные (в нашем случае берем чисто ID записей) с помощью цикла прогоняем через функцию wp_delete_post(), которая удаляет всё, что относится к записи. Ну и ещё я бы проверял, есть ли у записи прикрепленные изображения (или другие медиафайлы) и удалял их тоже, ибо они уже ведь тоже не нужны.

Link to post
Share on other sites
  • 2 weeks later...

Не стал изобретать велосипед, да и с PHP на ВЫ, оставил эту затею и использую https://wordpress.org/plugins/tieexpire-automated-post-expiry/

Спасибо campusboy, что указал на мою несостоятельность в данном вопросе )))

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...