删除页面时删除关联的媒体

时间:2013-08-12 作者:Howdy_McGee

Note

使用风险自负,这是一个错误,我遇到过几个实例,它会删除所有附件。不确定原因

删除页面时,是否可以删除与该页面关联的媒体?我知道在“插入媒体”页面中,您可以通过“上载到此页面”的图像进行过滤,因此我可以获得这些图像的列表,并在删除页面时删除它们吗?

现在我正在玩弄挂接删除帖子。马上这没什么作用,但我想我已经有所进展了。

function del_post_media($pid) {
    $query = "DELETE FROM wp_postmeta
            WHERE ".$pid." IN
            (
            SELECT id
            FROM wp_posts
            WHERE post_type = \'attachment\'
            )";
    global $wpdb;
    if ($wpdb->get_var($wpdb->prepare($query))) {
        return $wpdb->query($wpdb->prepare($query));
    }
    return true;
}
add_action(\'delete_post\', \'del_post_media\');

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

这个怎么样?它采用了get_posts() 功能参考页。

function delete_post_media( $post_id ) {

    $attachments = get_posts( array(
        \'post_type\'      => \'attachment\',
        \'posts_per_page\' => -1,
        \'post_status\'    => \'any\',
        \'post_parent\'    => $post_id
    ) );

    foreach ( $attachments as $attachment ) {
        if ( false === wp_delete_attachment( $attachment->ID ) ) {
            // Log failure to delete attachment.
        }
    }
}

add_action( \'before_delete_post\', \'delete_post_media\' );

SO网友:tfrommen

我想你在找这样的东西。。。?

function delete_associated_media($id) {
    // check if page
    if (\'page\' !== get_post_type($id)) return;

    $media = get_children(array(
        \'post_parent\' => $id,
        \'post_type\' => \'attachment\'
    ));
    if (empty($media)) return;

    foreach ($media as $file) {
        // pick what you want to do
        wp_delete_attachment($file->ID);
        unlink(get_attached_file($file->ID));
    }
}
add_action(\'before_delete_post\', \'delete_associated_media\');

结束

相关推荐

Posts and order

新手在这里快速提问,查看我的所有页面如果我点击快速编辑,我有机会在字段顺序上放置一个数字,并设置一个顺序,其中一个应该首先出现,然后是第二个,依此类推,尝试在帖子上执行相同的操作,但该选项不可用,您知道如何使其出现吗?谢谢阿图罗P、 S:哦,这一次我用的是wordpress 2.9.2