WooCommerce,如何删除可下载产品的订单权限

Jue*_*gen 2 woocommerce

我想删除下载某些订单文件的权限(即使已经付款),例如,如果客户付款被撤销。

我正在摆弄“wc_downloadable_file_permission”,但不知何故这只授予权限,但我想撤销它。

我什至尝试手动处理 wp_posts_meta (_download_permissions_granted:yes/no) 但它没有用。

到目前为止我得到了这个。

function revoke_download_permission( $order_id ) {    
$order = wc_get_order( $order_id ); 

if ( sizeof( $order->get_items() ) > 0 ) { 
    foreach ( $order->get_items() as $item ) { 
        $product = $item->get_product(); 

        if ( $product && $product->exists() && $product->is_downloadable() ) { 
            $downloads = $product->get_downloads(); 

            foreach ( array_keys( $downloads ) as $download_id ) { 
                wc_downloadable_file_permission( $download_id, $product, $order, $item->get_quantity() ); 
            } 
        } 
    } 
} 
Run Code Online (Sandbox Code Playgroud)

}

joh*_*yrd 5

在撰写本文时,Juergen 的解决方案与 WooCommerce 的新数据存储机制不一致。此外,它不会从没有相应顺序的下载权限数据库中删除下载权限。

这是一个用于批量重新生成所有下载权限的改进解决方案,它也解决了这些问题。以下与WooCommerce中的“重新生成下载权限”命令一致,但适用于所有已完成的订单。

把它放在你的functions.php 文件中,加载wp-admin 页面,然后从functions.php 中删除它。

明显的警告:这将删除您网站的所有下载权限,然后再重新生成它们。如果您手动为任何客户分配了任何产品的权限,这些权限将被处理并与您的订单数据库保持一致。使用完全由您自担风险,不作任何明示或暗示的保证。

add_action('init','my_activate_download_permissions');
function my_activate_download_permissions() {

$orders = get_posts( array(
    'post_type'      => 'shop_order',
    'post_status'    => 'wc-completed',
    'posts_per_page' => -1
    ) );

foreach ( $orders as $order ) {
    $data_store = WC_Data_Store::load( 'customer-download' );
    $data_store->delete_by_order_id( $order->ID );
    wc_downloadable_product_permissions( $order->ID, true );
    }
}
Run Code Online (Sandbox Code Playgroud)