Làm cách nào để xóa tất cả các nhận xét khỏi một bài đăng blog cũ cụ thể?


7

Tôi đang dọn dẹp một mục blog cũ, gây tranh cãi và tôi cần xóa tất cả các bình luận khỏi bài viết.

Đáng ngạc nhiên, tôi không thể tìm ra cách để làm điều này trong giao diện người dùng WordPress (3.0.4) hiện có.

Tôi chắc chắn có thể đi qua và nhấp vào "thùng rác" trên tất cả hơn 200 bình luận, nhưng điều đó dường như .. quá mức. Có cách nào khác để làm điều này mà tôi đang thiếu?

Câu trả lời:


6

Thay thế cho những người đọc điều này với nỗi sợ hãi đối với SQL ............... (hoặc tìm thấy điều này qua Google sau Januari 2011):

Đợi hành động này cho đến khi 3.1 xuất hiện, sau đó đi đến một bài đăng, kiểm tra tất cả các bình luận và hàng loạt "chuyển đến thùng rác" :) (nó sẽ xuất hiện bất kỳ ngày nào bây giờ) ( http://wordpress.org/about/roadmap/ )

(hoặc tải xuống 3.1 RC3 từ http://wordpress.org/doad/release-archive/ )

Thí dụ:

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


5

Xin chào @Jeff Atwood:

Tôi giả sử bạn có quyền truy cập MySQL. Điều này sẽ cung cấp cho bạn tất cả các nhận xét cho bài đăng trên blog của bạn có sên URL 'your-blog-post' (sên là phân đoạn cuối cùng trong URL của bài đăng của bạn nếu bạn đang sử dụng permalinks đẹp, tức là cho http://example.com/2011/01/foo-bar- baz / sên của bạn sẽ là 'foo-bar-baz'):

SELECT * from wp_comments WHERE comment_post_ID IN (
  SELECT ID FROM wp_posts WHERE post_name='your-post-slug'
)

Và điều này sẽ cung cấp cho bạn tất cả các siêu dữ liệu nhận xét:

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'
  )
) 

Vì vậy, ... chạy hai lệnh này (nhưng hãy chắc chắn thay thế giá trị post_name bằng với của bạn):

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'
);

PS Điều này tất nhiên sẽ xóa chúng hoàn toàn nhưng trừ khi bạn muốn giữ chúng trong thùng rác thì việc này dễ hơn là chuyển chúng vào thùng rác.


5

WordPress không hỗ trợ quản lý hàng loạt các bình luận trên một bài đăng trên cơ sở bài viết. Mặc dù nó có phần quản lý bình luận trực tiếp tại trang chỉnh sửa của bài đăng. Như bạn đã nói, bạn sẽ phải nhấp vào "Thùng rác" trên mỗi bình luận:

văn bản thay thế

Thay phiên, bạn có thể sao lưu bảng wp_comments và wp_commentmeta và chạy các truy vấn sau:

  1. Tìm ID bài. Hãy nói rằng id có liên quan là X.

    SELECT ID from wp_posts WHERE post_type='post' AND post_title='Hello world!' INTO @x; 
  2. Thêm siêu dữ liệu nhận xét có liên quan chỉ để duy trì tính toàn vẹn:

    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. Thùng rác tất cả các ý kiến:

    UPDATE wp_comments SET comment_approved='trash' WHERE comment_post_ID=@x;

câu trả lời tuyệt vời - vì tò mò nó gây chấn thương như thế nào nếu siêu dữ liệu bình luận không được chèn? Điều gì phá vỡ, nếu có gì?
Jeff Atwood

Tôi đã không thể tìm thấy một sự khác biệt lớn ngoại trừ những bình luận bị vứt bỏ sẽ không bị xóa sau những ngày EMPTY_TRASH_DAYS. (wp-gồm / default-constants.php). Nếu bạn hủy đăng ký cho họ, trạng thái phê duyệt của họ sẽ mặc định là "không được chấp thuận".
rsman

1
Tôi giả sử bạn nên thực hiện bước 3 trước bước 2 nếu bạn thực sự muốn giữ trạng thái phê duyệt cũ? Bây giờ chúng sẽ được đặt trashở bước 2, và sau đó chúng tôi sao chép trashtrạng thái này ở bước 3, không phải trạng thái trước đó.
Jan Fabry

@Jan Cảm ơn bạn đã chỉ ra, chỉnh sửa cho phù hợp.
rsman

0

Ngày nay, giải pháp tốt nhất nếu bạn có thể cài đặt WP-CLI trên máy chủ sẽ sử dụng theo cách này:

$ wp comment delete $(wp comment list --post_id={ID})

-1

Điều này là không đủ, bạn cũng phải cập nhật số lượng cột, nếu không nó sẽ không được hiển thị chính xác. Đây là một mã mẫu cho một cài đặt nhiều trang.

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() );
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.