ثبت‌نام ورود
خانه مقالات آموزشی آموزش ووکامرس حل مشکل آپدیت نشدن لینک دانلود محصولات ووکامرس برای خریداران قبلی

حل مشکل آپدیت نشدن لینک دانلود محصولات ووکامرس برای خریداران قبلی

آپدیت نشدن لینک دانلود محصولات ووکامرس برای خریداران قبلی
آپدیت نشدن لینک دانلود محصولات ووکامرس برای خریداران قبلی

اگر سایت خود را با ووکامرس راه‌اندازی کرده‌اید و قصد دارید محصولات دانلودی با ووکامرس به‌فروش برسانید، یک مشکل اساسی با محصولات دانلودی خواهید داشت. مشکل این هست که اگر فایل محصولات دانلودی ووکامرس را آپدیت کنید یا فایل جدیدی به لیست فایل‌ها اضافه کنید، کاربر شما نمی‌تواند لینک دانلود فایل جدید را مشاهده کند و همچنان لینک‌های دانلودی که موقع خرید دریافت کرده را مشاهده خواهد کرد. در این مقاله می‌خواهم نحوه حل مشکل آپدیت نشدن لینک دانلود محصولات ووکامرس برای خریداران قبلی را به شما توضیح دهم.

انتقال زیرساخت میهن وردپرس به ووکامرس

اگر اطلاع داشته باشید در حال تغییر سیستم فروش سایت میهن وردپرس از 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' ) );

به همین راحتی! حالا با خیال راحت فایل‌های دانلودی خود را آپدیت کنید.این کد دسترسی به تمام فایل‌های موجود در محصول خریداری شده را برای کاربران قبلی آزاد خواهد کرد.

موفق باشید.

راستی! برای دریافت مطالب جدید در کانال تلگرام یا پیج اینستاگرام میهن وردپرس عضو شوید.

سوالی دارید؟ از ما بپرسید

  1. کاربر مهمان U17845 ۰۹ دی ۱۳۹۹

    من اضافه کردم سایتم از دسترس خارج شد

  2. کاربر مهمان U25787 ۰۴ دی ۱۳۹۹

    سلام دمتون گرم پست خیلی کاربردی و عالی ای بود حرف ندارین
    فقط یک نکته اضافه کنم اگر قبلا فایل ها رو آپدیت کرده باشن و این کد رو اضافه کنن باز هم نشون نمیده فایل های جدید رو
    باید قبل از اپدیت کردن این کد قرار بگیره و یا اپدیت ها رو که قبلا اضافه کردن لینک هارو از داخل محصول پاک کنن به روزرسانی کنن محصول رو به حالت قبل و بعد دوباره بعد از اضافه کردن کد لینک هارو اضافه کنن تا کار کنه

  3. کاربر مهمان U17441 ۰۴ دی ۱۳۹۹

    سلام. با چه اصولی باید برگه سیاست حریم خصوصی و قوانین و مقررات رو بنویسیم؟

    • تیم پشتیبانی تیم پشتیبانی ۰۴ دی ۱۳۹۹

      سلام
      اطلاعاتی که هنگام نوشتن نظرات نوشته می شوند (مثل نام، نام کاربری، آدرس ایمیل و…). این اطلاعات اغلب قبل از نوشتن نظرات توسط افراد، دریافت می شود.
      به چه روش‌هایی اطلاعات را جمع‌آوری می کنید؟ (مثل : کوکی‌ها، فرم‌های ثبت‌نام، فرم نظرات و…)
      شما باید تمامی اطلاعاتی که شرکت‌های تبلیغاتی دیگر (مثل Google Adsense) جمع‌آوری می‌کنند را نیز در این صفحه بنویسید.
      قرار دادن توضیحات، همراه با لینک های تمامی ” سیاست‌های حفظ حریم خصوصی دیگر سایت ها ” که از آنها استفاده می‌کنید.
      اطلاعات تماس شما یا پشتیبانی سایت، برای مواردی که خوانندگان این صفحه، سوالی در این رابطه داشته

  4. کاربر مهمان U33979 ۰۴ دی ۱۳۹۹

    سلام و درود خدمت میهن وردپرس، ببخشید از حضورتون یه سوال داشتم ممنون میشم جواب بدین، از وقتی که مشکل ایندکس سرچ کنسول رفع شده و بازم می‌تونیم مطلب را به صورت دستی وارد و ایندکس کنیم، مطالب سایت من دیر ایندکس میشه یعنی تا یک هفته طول میکشه، ولی قبل از اون تو یک دقیقه و فوری ایندکس میشد، یعنی این مشل بعد از راه اندازی مجدد ایندکس دستی سرچ کنسول اتفاق افتاده