web-dev-qa-db-ja.com

子投稿を削除する

親が削除されたら、すべての子投稿を削除しようとしています。

親の投稿は問題なく削除されますが、子の投稿は正しく削除されません。

これが私が今持っているコードです:

$args = array( 
        'post_parent' => $parentid,
        'post_type' => 'custom-type'
    );

    $posts = get_posts( $args );

    if ($posts) {

        // Delete all the Children of the Parent Page
        foreach($posts as $post){

            wp_delete_post($post->ID, true);

        }

    }

    // Delete the Parent Page
    wp_delete_post($parentid, true);

何をすべきかは、ループして$parentidの子である投稿を取得し、それらを削除してから親の投稿を削除することです。

現在のところ、親の投稿を削除するだけですが、すべての子を残します。

私は自分のデータベースを見ていて、子ページは間違いなく正しいpost_parent idで正しく作成されています。

すべての子の投稿を取得して削除する方法はありますか?

ありがとう、

ジェイソン

2
Jason Bahl

これを試してみてください。

$args = array( 
    'post_parent' => $parentid,
    'post_type' => 'custom-type'
);

$posts = get_posts( $args );

if (is_array($posts) && count($posts) > 0) {

    // Delete all the Children of the Parent Page
    foreach($posts as $post){

        wp_delete_post($post->ID, true);

    }

}

// Delete the Parent Page
wp_delete_post($parentid, true);
3
Barry Kooij

delete_postにフックします。以下のコードは再帰的に実行されるべきで、孫もいる場合は削除されます。 コードはテストされていません

add_action('delete_post', 'wpse53967_clear_all_childs');

function wpse53967_clear_all_childs($post_id){
    $childs = get_post(
        'post_parent' => $post_id,
        'post_type' => 'post-type' 
    );

    if(empty($childs))
        return;

    foreach($childs as $post){
        wp_delete_post($post->ID, true); // true => bypass trash and permanently delete
    }
}
0
Sisir