سایت برتر

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

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

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

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

اگر اطلاع داشته باشید در حال تغییر سیستم فروش سایت میهن وردپرس از 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. U25649 ۶ تیر ۱۴۰۰

    با سلام و خسته نباشید خددمت شما
    من میخوام وقتی کاربر محصولی رو خرید میکنه از طریق ووکامرس به جای اینکه فایلی رو دانلود کنه یک لینک بهش داده بشه …
    برای مثال وقتی محصول رو خرید و وارد حساب کاربری خودش شد یک لینک https://mihanwp.com مثل این باشه که کلیک کنه و وارد این سایت بشه…
    من وقتی لینک گذاشتم در اون قسمت برای کاربرا میخواد چیزی رو دانلود کنه و نمیتونن وارد اون لینک بشن…
    ممنون میشم اگر امکان داره این کار من رو راهنمایی بفرمایید

    • رضا حسینی راد رضا حسینی راد ۶ تیر ۱۴۰۰

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

  2. U37224 ۱۰ اسفند ۱۳۹۹

    سلام-وقت بخیر-من یه مشکلی پبدا کرده سایتم-محصولات دانلودی رو که مشتری خرید میکنه داخل پروفایل کاربریش که میره برا دانلود روی هر گزینه ای که میزنه صفحه عوض نمیشه و نمیتونه سفارشات خودش رو ببینه تا دانلود کنه-فکر میکنم برگه این مورد از ووکامرس غیر فعال هست -ممنون میشم راهنمایی که چیکار کنم؟البته صفحه حساب کاربری در ووکامرس روی my account قرار داره و این مشکل پا برجاست

    • رضا حسینی راد رضا حسینی راد ۱۲ اسفند ۱۳۹۹

      سلام بستگی به افزونه‌ای داره که برای نمایش سفارشات استفاده می‌کنید. در همون صفحه حساب من ووکامرس این مشکل رو دارید؟

  3. U8071 ۱۳ بهمن ۱۳۹۹

    سلام!
    برای لایسنس گذاری میشه آموزش بذارین؟

    • رضا حسینی راد رضا حسینی راد ۱۴ بهمن ۱۳۹۹

      سلام باید php رو ابتدا یاد بگیرید. در دوره php ثبت نام کنید بعد از این دوره یک دوره پلاگین نویسی وردپرس خواهیم داشت.

  4. U17845 ۹ دی ۱۳۹۹

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

  5. U25787 ۴ دی ۱۳۹۹

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

    • رضا حسینی راد رضا حسینی راد ۵ دی ۱۳۹۹
      • U7572 ۲۰ خرداد ۱۴۰۰

        سلام. وقت بخیر. با توجه به توضیحات دوستمون تو کامنت بالا عمل کردم اما اصلا لینک ها تغییر نمی کنه.
        یعنی اول کد رو گذاشتم . بعد لینک محصول دانلودی رو حذف کردم و بعدش بروزرسانیش کردم. بعد از اون دوباره لینک ها رو قرار دادم. ولی لینک ها اصلا تغییر نکرد
        میشه بیشتر توضیح دهید که چطور باید این مورد رو حل کنم؟

  6. U17441 ۴ دی ۱۳۹۹

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

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

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

  7. U33979 ۴ دی ۱۳۹۹

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