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

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

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

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

6 голосов | спросил Jeff Atwood 22 Jam1000000amSat, 22 Jan 2011 07:45:43 +030011 2011, 07:45:43

5 ответов


6

Альтернатива для людей, читающих это со страхом за SQL ............... (или найти это через Google после Januari 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

ответил edelwater 24 Jpm1000000pmMon, 24 Jan 2011 19:09:17 +030011 2011, 19:09:17
5

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 [email protected];
    
    INSERT INTO wp_commentmeta (comment_id, meta_key, meta_value) SELECT comment_ID, "wp_trash_meta_status",comment_approved FROM wp_comments WHERE [email protected];
    
  3. Удалить все комментарии:

    UPDATE wp_comments SET comment_approved='trash' WHERE [email protected];
    
ответил edelwater 24 Jpm1000000pmMon, 24 Jan 2011 19:09:17 +030011 2011, 19:09:17
4

Hi @Jeff Atwood:

Я предполагаю, что у вас есть доступ к MySQL-запросу. Это даст вам все комментарии для вашего сообщения в блоге, URL-адрес которого равен 'your-blog-post' (пул - последний сегмент URL-адреса вашего сообщения если вы используете довольно постоянные ссылки, то есть для http://example.com/2011/01 /foo-bar-baz / ваш slug будет '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. Это, конечно, полностью удалит их, но если вы не хотите держать их в корзине, это проще, чем перемещать их в корзину.

ответил MikeSchinkel 22 Jpm1000000pmSat, 22 Jan 2011 12:04:42 +030011 2011, 12:04:42
0

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

$ wp comment delete $(wp comment list --post_id={ID})
ответил ClemC 18 PM00000040000002431 2017, 16:18:24
-1

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

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() );
}
ответил Eric Malalel 18 PM000000120000004531 2017, 12:56:45

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132