web-dev-qa-db-fra.com

Supprimer les messages enfants

J'essaie de supprimer toutes les publications enfants lorsque le parent est supprimé.

La publication parent supprime parfaitement, mais les publications enfant ne sont pas correctement supprimées.

Voici le code que j'ai en place maintenant:

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

Ce qu’elle devrait faire, c’est de parcourir les publications qui sont l’enfant de $parentid et de les supprimer, puis de supprimer la publication parente.

Actuellement, il supprime simplement la publication parent, mais laisse tous les enfants derrière.

Je regarde ma base de données et les pages enfants sont définitivement créées correctement avec le post_parent id correct.

Existe-t-il un moyen d’obtenir toutes les publications enfants et de les supprimer?

Merci,

Jason

2
Jason Bahl

Essayez comme ça:

$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

Accrocher dans delete_post. Le code ci-dessous devrait être exécuté de manière récursive et sera supprimé s'il y a aussi des petits-enfants. code non testé

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