آپدیت نشدن لینک دانلود محصولات ووکامرس برای خریداران قبلی
- آموزش • آموزش وردپرس
- ۱۶ آذر ۱۴۰۲
- 2,405 بازدید
توی این مقاله از وبیت ، میخواهیم راجب مشکلی صحبت کنیم که خیلی از وبسایت ها هنوز هم درگیر برطرف کردنش هستند . این مشکل همان آپدیت نشدن لینک دانلود محصولات ووکامرس برای خریداران قبلیه ! پیشنهاد میکنم که وبیت رو تا انتهای این مقاله همراهی کنید . همچنین اگر قسمتی از این آموزش براتون مشکل یا گنگ هست ، از قسمت نظرات کاربران با ما به اشتراک بگذارید . در گذشته ، سعی میکردیم به آموزش مشکلات مختلفی که در سایت های وردپرسی وجود دارند ، بپردازیم . اما الان میخواهیم به صورت یک به یک ، مشکلاتی رو بررسی کنیم که ضروری و واقعا مهم هستند . در هرصورت برای کسب اطلاعات بیشتر ، پیشنهاد میکنم که ولاگ وبیت رو دنبال کنید .
میدانید که اگر سایت خود را با ووکامرس راهاندازی کردهاید و قصد دارید محصولات دانلودی با ووکامرس بهفروش برسانید، یک مشکل اساسی با محصولات دانلودی خواهید داشت. دقت کنید که این مشکل ، فقط برای سایت شما نیست . بلکه برای اکثر وبسایت ها این مشکل وجود داره ! اگر فایل محصولات دانلودی ووکامرس را آپدیت کنید یا فایل جدیدی به لیست فایلها اضافه کنید، کاربر شما نمیتواند لینک دانلود فایل جدید را مشاهده کند و همچنان لینکهای دانلودی که موقع خرید دریافت کرده را مشاهده خواهد کرد.
آنچه در این پست میخوانید
حل مشکل آپدیت نشدن لینک دانلود محصولات در ووکامرس
برای حل این مشکل باید ووکامرس را مجبور به بررسی و ارائه لینک دانلود بهصورت لحظهای کنیم. وقتی در ووکامرس سفارشی ثبت میشود، در متاهای سفارش، لیست محصولات و لیست فایلهای دانلود شده قرار میگیرد. حالا برای آپدیت کردن لینک دانلودی هیچ راهی نیست و کاربر فقط میتواند به فایلهای قبلی دسترسی داشته باشد. اما هیچوقت محدودیتی در استفاده از وردپرس و ووکامرس نداریم. چرا که با استفاده از 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' ) );
جمع بندی برای رفع مشکل آپدیت لینک دانلود محصولات ووکامرس:
در ابتدای مقاله ، به وجود یک مشکل خیلی بزرگ در وبسایت های فروشگاهی اشاره کردیم . این مشکل ، همان آپدیت نشدن لینک دانلود محصولات ووکامرس هست . پس از آن ، بهتون توضیح دادیم که این مشکل چرا به وجود می آید و چطوری میشه رفعش کرد . در نهایت هم کد بالا رو برای اینکه در فایل فانکشن سایت تون قرار بدید ، آموزش دادیم . حالا با خیال راحت فایلهای دانلودی خود را آپدیت کنید.
این کد دسترسی به تمام فایلهای موجود در محصول خریداری شده را برای کاربران قبلی آزاد خواهد کرد. امیدوارم که همه مقالات وبیت که در ارتباط با مشکلات وردپرسیه و یا در مورد افزونه های جدید صحبت میکنه ، براتون مفید واقع شده باشه . از طرفی اگر که این مقاله هم تونست به حل کردن مشکل شما کمک کنه ، اون رو برای دوستان و همکاران خود ارسال کنید تا آنها هم از این آموزش استفاده کنند .