Как удалить все комментарии из определенного старого сообщения в блоге?
Я очищаю старую, спорную запись в блоге, и мне нужно удалить все комментарии из поста.
Удивительно, но я не могу найти способ сделать это в рамках существующего пользовательского интерфейса WordPress (3.0.4).
Я, конечно, могу пройти и нажать "корзина" на всех 200+ комментариях, но это кажется.. чрезмерный. Есть ли другой способ сделать это, которого мне не хватает?
5 answers
Альтернатива для людей, читающих это со страхом за SQL............... ( или найти это через Google после января 2011 года):
Дождитесь этого действия, пока не выйдет 3.1, затем перейдите к сообщению, проверьте все комментарии и наберите "переместить в корзину":) (оно должно появиться в любой день) (http://wordpress.org/about/roadmap/)
(или загрузите 3.1 RC3 с http://wordpress.org/download/release-archive/)
Пример:
Привет@Джефф Этвуд:
Я предполагаю, что у вас есть доступ к запросам MySQL. Это даст вам все комментарии к вашему сообщению в блоге, URL-адрес которого является 'your-blog-post'
( пуля - это последний сегмент в URL-адресе вашего сообщения, если вы используете довольно постоянные ссылки, т.Е. Для http://example.com/2011/01/foo-bar-baz / ваша пуля была бы 'foo-bar-baz'
):
SELECT * from wp_comments WHERE comment_post_ID IN (
SELECT ID FROM wp_posts WHERE post_name='your-post-slug'
)
И это даст вам все метаданные комментариев:
SELECT * from wp_commentmeta WHERE comment_id IN (
SELECT comment_ID from wp_comments WHERE comment_post_ID IN (
SELECT ID FROM wp_posts WHERE post_name='your-post-slug'
)
)
Итак... выполните эти две команды (но обязательно замените значение post_name должно быть равно вашему):
DELETE from wp_commentmeta WHERE comment_id IN (
SELECT comment_ID from wp_comments WHERE comment_post_ID IN (
SELECT ID FROM wp_posts WHERE post_name='your-post-slug'
)
);
DELETE from wp_comments WHERE comment_post_ID IN (
SELECT ID FROM wp_posts WHERE post_name='your-post-slug'
);
P.S. Это, конечно, полностью удалит их, но если вы не хотите хранить их в корзине, это проще, чем перемещать их в корзину.
WordPress не поддерживает массовое управление комментариями по постам. Хотя в нем есть раздел управления комментариями непосредственно на странице редактирования сообщения. Как вы сказали, вам придется нажимать на "Мусор" в каждом отдельном комментарии:
В качестве альтернативы вы можете создать резервную копию таблицы wp_comments и wp_commentmeta и выполнить следующие запросы:
-
Найдите идентификатор записи. Допустим, соответствующий идентификатор X.
SELECT ID from wp_posts WHERE post_type='post' AND post_title='Hello world!' INTO @x;
-
Добавить соответствующие метаданные комментариев просто для сохранения целостности:
INSERT INTO wp_commentmeta (comment_id, meta_key, meta_value) SELECT comment_ID, "wp_trash_meta_time", UNIX_TIMESTAMP() FROM wp_comments WHERE comment_post_ID=@x; INSERT INTO wp_commentmeta (comment_id, meta_key, meta_value) SELECT comment_ID, "wp_trash_meta_status",comment_approved FROM wp_comments WHERE comment_post_ID=@x;
-
Уничтожьте все комментарии:
UPDATE wp_comments SET comment_approved='trash' WHERE comment_post_ID=@x;
В настоящее время лучшим решением , если вы можете установить WP-CLI на сервере, было бы использовать его следующим образом:
$ wp comment delete $(wp comment list --post_id={ID})
Этого недостаточно, вы также должны обновить количество столбцов, иначе оно будет отображаться неправильно. Вот пример кода для многоузловой установки.
try
{
$rowsUpdated = $wpdb->query(
"
UPDATE " . $wpdb->prefix . "COMMENTS SET COMMENT_APPROVED='trash'
WHERE comment_post_id = " . $post_id
);
if ( $rowsUpdated != 0 ) {
$wpdb->query(
"
UPDATE " . $wpdb->prefix . "POSTS SET COMMENT_COUNT = COMMENT_COUNT - " . $rowsUpdated . "
WHERE ID = " . $post_id
);
}
}
catch (Exception $e)
{
echo( 'Unexpected error while trying to connect to WP database: ' . $e->getMessage() );
}