Нужны MySQL Queries для удаления постов WordPress и мета поста более чем X дней назад - PullRequest
0 голосов
/ 29 января 2010

Я веду блог, где сообщество может публиковать чувствительные ко времени ссылки сообщества (спортивные результаты и т. Д.).
Через некоторое время эти сообщения перестают быть полезными, поэтому я хочу удалить их в пакетном режиме через запрос MySQL, но не знаю как. Я полагаю, что полное избавление от этих сообщений - это больше, чем просто удаление из таблицы the wp_posts, верно? Есть ли другие таблицы за работой, не так ли?

Я пробовал пару auto- или batch-delete плагинов, но они не работают половину времени.

Не могли бы вы предоставить запрос MySQL для удаления сообщений и их фрагментов старше X дней из всех соответствующих таблиц?

1 Ответ

0 голосов
/ 29 января 2010

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

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

Редактировать.

Другим подходом может быть перемещение сообщений в отдельную категорию, но если вы хотите сделать как «Разрушитель», это тоже хорошо: -)

1) Find all eligible posts and their attachments

SELECT wp_posts.ID, att.ID
FROM wp_posts 
LEFT JOIN wp_posts att ON att.post_parent = wp_posts.ID
WHERE wp.posts.post_date < EXPIRATION_DATE;

2) Find all related comments

SELECT wp_comments.comment_ID 
FROM wp_comments 
WHERE comment_post_ID IN ( <post ID:s selected in 1)> )

3) Delete all meta related to posts and comments, then comments, then posts

DELETE FROM wp_commentmeta WHERE comment_id IN ( <comment ID:s selected in 2)> )
DELETE FROM wp_postmeta WHERE post_id IN ( <post ID:s selected in 1)> )
DELETE FROM wp_term_relationships WHERE object_id IN ( <post ID:s selected in 1)> )
DELETE FROM wp_comments WHERE comment_ID IN ( <comment ID:s selected in 2)> )
DELETE FROM wp_posts WHERE ID IN ( <post ID:s selected in 1)> )

Да, некоторые из них можно объединить, но мне нравится, чтобы все было как можно проще.

Таблицы и имена столбцов взяты из моего WP 3.0-alpha. Возможно, вы захотите проверить Описание базы данных , чтобы убедиться, что вы все поняли.

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