web-dev-qa-db-ja.com

削除したユーザーの投稿と添付ファイルをすべて削除する方法

ユーザーを削除すると、WordPressは自分のカスタム投稿や添付ファイルではなく、このユーザーの投稿またはページを削除することができます。

特別なフックのためのアイデア?

add_action( 'delete_user', 'my_delete_user');

function my_delete_user($user_id) {
    $user = get_user_by('id', $user_id);
    $the_query = new WP_Query( $args );
        if ( have_posts() ) { 
            while ( have_posts() ) { 
                the_post(); 
                    wp_delete_post( $post->ID, false ); 

                    // HOW TO DELETE ATTACHMENTS ?
            }
        }
}
1
Mic

あなたが選ぶフックは適切です、そしてここに削除されたユーザーのすべてのタイプ(投稿、ページ、リンク、添付ファイルなど)のすべての投稿を削除するためにそれを使う方法があります:

add_action('delete_user', 'my_delete_user');
function my_delete_user($user_id) {
    $args = array (
        'numberposts' => -1,
        'post_type' => 'any',
        'author' => $user_id
    );
    // get all posts by this user: posts, pages, attachments, etc..
    $user_posts = get_posts($args);

    if (empty($user_posts)) return;

    // delete all the user posts
    foreach ($user_posts as $user_post) {
        wp_delete_post($user_post->ID, true);
    }
}

ユーザーの添付ファイルのみを削除する場合は、post_type引数をanyからattachmentに変更し、wp_delete_attachment($attachment_id)の代わりにwp_delete_post()を使用します。

1
Ahmad M