我想删除下载某些订单文件的权限(即使已经付款),例如,如果客户付款被撤销。
我正在摆弄“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)
}
在撰写本文时,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)
| 归档时间: |
|
| 查看次数: |
1704 次 |
| 最近记录: |