Как удалить все комментарии из определенного старого сообщения в блоге?


Я очищаю старую, спорную запись в блоге, и мне нужно удалить все комментарии из поста.

Удивительно, но я не могу найти способ сделать это в рамках существующего пользовательского интерфейса WordPress (3.0.4).

Я, конечно, могу пройти и нажать "корзина" на всех 200+ комментариях, но это кажется.. чрезмерный. Есть ли другой способ сделать это, которого мне не хватает?

 7
Author: Jeff Atwood, 2011-01-22

5 answers

Альтернатива для людей, читающих это со страхом за SQL............... ( или найти это через Google после января 2011 года):

Дождитесь этого действия, пока не выйдет 3.1, затем перейдите к сообщению, проверьте все комментарии и наберите "переместить в корзину":) (оно должно появиться в любой день) (http://wordpress.org/about/roadmap/)

(или загрузите 3.1 RC3 с http://wordpress.org/download/release-archive/)

Пример:

Http://edward.de.leau.net/files/bulkremove.png

 6
Author: edelwater, 2011-01-24 16:17:12

Привет@Джефф Этвуд:

Я предполагаю, что у вас есть доступ к запросам 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. Это, конечно, полностью удалит их, но если вы не хотите хранить их в корзине, это проще, чем перемещать их в корзину.

 5
Author: MikeSchinkel, 2011-01-22 09:04:42

WordPress не поддерживает массовое управление комментариями по постам. Хотя в нем есть раздел управления комментариями непосредственно на странице редактирования сообщения. Как вы сказали, вам придется нажимать на "Мусор" в каждом отдельном комментарии:

alt text

В качестве альтернативы вы можете создать резервную копию таблицы wp_comments и wp_commentmeta и выполнить следующие запросы:

  1. Найдите идентификатор записи. Допустим, соответствующий идентификатор X.

    SELECT ID from wp_posts WHERE post_type='post' AND post_title='Hello world!' INTO @x; 
    
  2. Добавить соответствующие метаданные комментариев просто для сохранения целостности:

    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;
    
  3. Уничтожьте все комментарии:

    UPDATE wp_comments SET comment_approved='trash' WHERE comment_post_ID=@x;
    
 5
Author: rsman, 2015-01-01 01:24:58

В настоящее время лучшим решением , если вы можете установить WP-CLI на сервере, было бы использовать его следующим образом:

$ wp comment delete $(wp comment list --post_id={ID})
 0
Author: ClemC, 2017-08-18 13:18:24

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

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() );
}
 -1
Author: Eric Malalel, 2017-08-18 09:56:45