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