- تاریخ : 24th دسامبر 2020
- موضوع : اسکریپت , اسکریپت جدید , اسکریپت رایگان , اسکریپت فارسی
- بازدید : 196 نمایش
- نظرات : بدون نظر
حل مشکل آپدیت نشدن لینک دانلود محصولات ووکامرس برای خریداران قبلی
[ad_1]
اگر سایت خود را با ووکامرس راهاندازی کردهاید و قصد دارید محصولات دانلودی با ووکامرس بهفروش برسانید، یک مشکل اساسی با محصولات دانلودی خواهید داشت. مشکل این هست که اگر فایل محصولات دانلودی ووکامرس را آپدیت کنید یا فایل جدیدی به لیست فایلها اضافه کنید، کاربر شما نمیتواند لینک دانلود فایل جدید را مشاهده کند و همچنان لینکهای دانلودی که موقع خرید دریافت کرده را مشاهده خواهد کرد. در این مقاله میخواهم نحوه حل مشکل آپدیت نشدن لینک دانلود محصولات ووکامرس برای خریداران قبلی را به شما توضیح دهم.
انتقال زیرساخت میهن وردپرس به ووکامرس
اگر اطلاع داشته باشید در حال تغییر سیستم فروش سایت میهن وردپرس از Easy Digital Downloads به ووکامرس هستیم. پس از اتمام انتقال طی یک لایو اینستاگرامی دلیل انجام اینکار را همراه با روند انجام انتقال توضیح خواهیم داد. اما اولین مشکلی که با استفاده از ووکامرس با آن مواجه شدیم این بود که لینکهای دانلود پس از آپدیت شدن، در اختیار کاربر قرار نمیگرفتند. این مشکل اساسی بود که یکی از کاربران عزیز سایت نیز سوالی در مرکز پشتیبانی درباره نحوه برطرف کردن آن پرسیده بودند. پس تصمیم گرفتیم نحوه حل این مشکل را با شما در میان بگذاریم.
حل مشکل آپدیت نشدن لینک دانلود ووکامرس
برای حل این مشکل باید ووکامرس را مجبور به بررسی و ارائه لینکهای دانلود بهصورت لحظهای کنیم. وقتی در ووکامرس سفارشی ثبت میشود، در متاهای سفارش، لیست محصولات و لیست فایلهای دانلود شده قرار میگیرد. حالا برای آپدیت کردن فایل دانلودی هیچ راهی نیست و کاربر فقط میتواند به فایلهای قبلی دسترسی داشته باشد.
اما هیچوقت محدودیتی در استفاده از وردپرس و ووکامرس نداریم. چرا که با استفاده از PHP و هوکهای وردپرس میتوانیم محدودیتها را به صورت کامل کنار بگذاریم.
برای حل این مشکل کافیست کد زیر را به فایل functions.php قالب سایتتان اضافه کنید:
class WooCommerce_Legacy_Grant_Download_Permissions {
protected static $instance = null;
private function __construct() {
if ( ! class_exists( 'WC_Admin_Post_Types', false ) ) {
return;
}
remove_action( 'woocommerce_process_product_file_download_paths', array( 'WC_Admin_Post_Types', 'process_product_file_download_paths' ), 10, 3 );
add_action( 'woocommerce_process_product_file_download_paths', array( $this, 'grant_download_permissions' ), 10, 3 );
}
public static function get_instance() {
if ( null === self::$instance ) {
self::$instance = new self;
}
return self::$instance;
}
public function grant_download_permissions( $product_id, $variation_id, $downloadable_files ) {
global $wpdb;
if ( $variation_id ) {
$product_id = $variation_id;
}
if ( ! $product = wc_get_product( $product_id ) ) {
return;
}
$existing_download_ids = array_keys( (array) $product->get_downloads() );
$updated_download_ids = array_keys( (array) $downloadable_files );
$new_download_ids = array_filter( array_diff( $updated_download_ids, $existing_download_ids ) );
$removed_download_ids = array_filter( array_diff( $existing_download_ids, $updated_download_ids ) );
if ( ! empty( $new_download_ids ) || ! empty( $removed_download_ids ) ) {
$existing_orders = $wpdb->get_col( $wpdb->prepare( "SELECT order_id from {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE product_id = %d GROUP BY order_id", $product_id ) );
foreach ( $existing_orders as $existing_order_id ) {
$order = wc_get_order( $existing_order_id );
if ( $order ) {
if ( ! empty( $removed_download_ids ) ) {
foreach ( $removed_download_ids as $download_id ) {
if ( apply_filters( 'woocommerce_process_product_file_download_paths_remove_access_to_old_file', true, $download_id, $product_id, $order ) ) {
$wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE order_id = %d AND product_id = %d AND download_id = %s", $order->get_id(), $product_id, $download_id ) );
}
}
}
if ( ! empty( $new_download_ids ) ) {
foreach ( $new_download_ids as $download_id ) {
if ( apply_filters( 'woocommerce_process_product_file_download_paths_grant_access_to_new_file', true, $download_id, $product_id, $order ) ) {
if ( ! $wpdb->get_var( $wpdb->prepare( "SELECT 1=1 FROM {$wpdb->prefix}woocommerce_downloadable_product_permissions WHERE order_id = %d AND product_id = %d AND download_id = %s", $order->get_id(), $product_id, $download_id ) ) ) {
wc_downloadable_file_permission( $download_id, $product_id, $order );
}
}
}
}
}
}
}
}
}
add_action( 'admin_init', array( 'WooCommerce_Legacy_Grant_Download_Permissions', 'get_instance' ) );
به همین راحتی! حالا با خیال راحت فایلهای دانلودی خود را آپدیت کنید.این کد دسترسی به تمام فایلهای موجود در محصول خریداری شده را برای کاربران قبلی آزاد خواهد کرد.
موفق باشید.
راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام میهن وردپرس عضو شوید.
[ad_2]
لینک منبع مطلب
به نکات زیر توجه کنید