親が削除されたら、すべての子投稿を削除しようとしています。
親の投稿は問題なく削除されますが、子の投稿は正しく削除されません。
これが私が今持っているコードです:
$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で正しく作成されています。
すべての子の投稿を取得して削除する方法はありますか?
ありがとう、
ジェイソン
これを試してみてください。
$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);
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
}
}