是否从数据库中删除所有视频附件,包括文件和后期/后期处理?

时间:2018-05-02 作者:jockebq

我正在尝试制作一个函数,从数据库中删除所有视频文件+附件帖子和附件帖子。当用户角色切换到“基本”时,应运行此操作。如果post\\u mime\\u类型以“video”开头,因为它可以是video/mp4或video/quicktime等。。。我已经走了这么远,但我无法完全理解:

add_action( \'set_user_role\', function( $user_id, $role, $old_roles )
{
    if ( \'basic\' == $role ) {
        $args = array(
            \'fields\'          => \'ids\',
            \'posts_per_page\'  => -1,
            \'post_type\'       => \'attachment\',
            \'post_mime_type\'  => array(\'video/x-ms-asf\',\'video/x-ms-wmv\',\'video/x-ms-wmx\',\'video/x-ms-wm\',\'video/avi\',\'video/divx\',\'video/x-flv\',\'video/quicktime\',\'video/mpeg\',\'video/mp4\',\'video/ogg\',\'video/webm\',\'video/x-matroska\')
        );
        $all_ids = new WP_Query( $args );
        if ( $all_ids->have_posts() ) {
            foreach ( $all_ids->posts as $post ) {
                wp_delete_attachment( $post->ID, true );
            }
        }
    }

}, 10, 3 );
这不管用,因为我真的不知道我错过了什么!

使用我现有的功能作为指导,效果很好。这将meta\\u值更改为空。

add_action( \'set_user_role\', function( $user_id, $role, $old_roles )
{
    if ( \'basic\' == $role ) {
            $args = array( \'fields\'          => \'ids\',
                           \'posts_per_page\'  => -1,
                           \'post_type\'       => \'slide\',
                           \'meta_key\'        => \'background-video\'
                           );
            $all_ids = new WP_Query( $args );
            if ( $all_ids->have_posts() ) {
                while ( $all_ids->have_posts() ) {
                    $all_ids->the_post();
                    update_post_meta( get_the_ID(), \'background-video\', \'\' );
                }
            }
            wp_reset_postdata();
    }

}, 10, 3 );

1 个回复
SO网友:Krzysiek Dróżdż

你打电话wp_delete_attachment 通过$attachmentid 这是未定义的,所以它无法工作。。。还有$force_delete 未在代码中的任何位置定义变量。

在这里使用普通循环也没有意义-在这个操作中不使用模板标记,所以调用the_post 只是浪费资源。。。

add_action( \'set_user_role\', function( $user_id, $role, $old_roles )
{
    if ( \'basic\' == $role ) {
        $args = array(
            \'fields\'          => \'ids\',
            \'posts_per_page\'  => -1,
            \'post_type\'       => \'attachment\',
            \'post_mime_type\'  => \'video\'
        );
        $all_ids = new WP_Query( $args );
        if ( $all_ids->have_posts() ) {
            foreach ( $all_ids->posts as $post ) {
                wp_delete_attachment( $post->ID );
                // wp_delete_attachment( $post->ID, true );  // <- use this, if you wan\'t to bypass trash
            }
        }
    }

}, 10, 3 );

结束

相关推荐

对WooCommerce的Functions.php更改不起作用

我正在尝试将其添加到函数中。php。在我的另一个站点上的测试实验室中,它可以很好地添加测试信息。但在这个网站上,我试图把它添加到什么都没有发生的情况下。该网站正在使用最新的woocommerce运行一个建筑节俭主题。有什么想法吗?我基本上只是想在每个产品页面上添加一行类似于免责声明但无法添加的文本。add_action(\'woocommerce_before_add_to_cart_form\',\'print_something_below_short_description\');