نویسنده:
بازدید: 403 بازدید
حل مشکل آپدیت نشدن لینک دانلود ووکامرس توسط افزونه های وردپرس
5/5 - (2 امتیاز)

با درود و شادباش به تمام عزیزان و دوست داران ووکامرس و وب سایتهای فروش فایل های دانلودی توسط ووکامرس مانند وب سما (وبسما)

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

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

حل مشکل آپدیت نشدن لینک دانلود ووکامرس توسط افزونه های وردپرس
حل مشکل آپدیت نشدن لینک دانلود ووکامرس توسط افزونه های وردپرس

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

نکته مهمی که مجموعه توسعه دهنده ووکامرس به آن دقت و توجه داشته اند که این اتفاق برای به روز رسانی تمامی لینکها باعت ایجاد درخواست ها و ریکوئست های زیادی برای و ب سایت و پایگاه داده سنگین را انجام می دهد.

به همین دلیل از هسته WooCommerce از نسخه 3.9 به بعد این قابلیت را تنظیمات حذف کرده است.

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

حل مشکل آپدیت نشدن لینک دانلود ووکامرس توسط افزونه های وردپرس

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

حل مشکل آپدیت نشدن لینک دانلود ووکامرس توسط افزونه های وردپرس
حل مشکل آپدیت نشدن لینک دانلود ووکامرس توسط افزونه های وردپرس
  • روش اول: استفاده از افزونه های ach-update-woo-download-links و  افزونه  Grant Download Permissions For Past Woocommerce Orders Master ( البته افزونه Grant Download Permissions دیگر در آپدیت جدید ووکارمس کار نمیکند )  که به شما امکان می‌دهد به‌صورت خودکار لینک‌های دانلود را برای خریداران قبلی خود را  آپدیت کنید.

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

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

حل مشکل آپدیت نشدن لینک دانلود ووکامرس

  • روش دوم: استفاده از کد PHP که در این مقاله آموزش داده میشود. برای این کار، شما باید کد PHP را در فایل functions.php قالب سایت‌تان کپی و قرار دهید.

  • این کد با استفاده از هوک‌های وردپرس و ووکامرس، لینک‌های دانلود را برای خریداران قبلی آپدیت می‌کند.

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

 

حالا ما برای شما با استفاده از PHP و هوک‌های وردپرس چند خط کد برای حل این مشکل نوشتیم که کافی است آن‌را به انتهای فایل اضافه کنید و در نهایت ذخیره را بزنید.

class WooCommerce_broken_link_Download {
	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, 'link_download_permissions' ), 10, 3 );
	}
	public static function get_instance() {
		if ( null === self::$instance ) {
			self::$instance = new self;
		}
		return self::$instance;
	}
	public function link_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_broken_link_Download', 'get_instance' ) );

جمع بندی

برای شما مفید بوده باشد. اگر سوال دیگری داشتید، من در خدمتم. 🙏

مطالعه بیشتر