Delete Child Posts

时间:2012-06-01 作者:Jason Bahl

当父帖子被删除时,我正在尝试删除所有子帖子。

父帖子删除得很好,但子帖子没有正确删除。

以下是我现在掌握的代码:

$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 身份证件

有没有办法获取所有子帖子并将其删除?

谢谢

杰森

2 个回复
最合适的回答,由SO网友:Barry Kooij 整理而成

Try it like this:

$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);
SO网友:Sisir

钩入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
    }
}

结束

相关推荐

对$wpdb->GET_RESULTS检索到的POST结果数组使用Have_Posts()

我不知道我是弱智、疯狂还是纯粹的天才,但我决定使用标签作为链接整个网站内容的一种方式(一个大型多对多关系网站,用于归档大型项目的各个方面)。不幸的是,这意味着一些插件使用的一些自定义帖子类型不能与其他对象(帖子、页面等)正确链接,因为它们使用其他分类法(在媒体“附件”的情况下,它们根本不使用分类法,除非我加入一个插件来解决这个问题——我正在使用它,它使用不同的分类法……)。事实上,一些插件类型有特定的硬编码分类法,所以我不能真正地检查和更改它们的核心代码,否则插件升级会抹去我所有的辛苦工作。为了解决这种碎