اگر شماهم تا به حال محصولات دانلودی ووکامرس را در سایت خود منتشر کرده باشید احتمالا با مشکل آپدیت نشدن لینک دانلود برای خریداران قبلی یا انجام نشدن بروزرسانی لینک دانلود محصولات مواجه شده اید. طوری که لینک دانلودی که تغییر میدهید یا اضافه میکنید برای خریداران جدید اضافه میگردد ولی برای خریداران قبلی تغییر نمیکند.
در ادامه این مقاله آموزشی به دو روش کاربردی میخواهیم به شما توضیح دهیم که چطور این مشکل را حل کنید. در روش اول با استفاده از افزونه وردپرس این کار را انجام میدهیم ولی در روش دوم با استفاده از اضافه کردن کد در فایل functions.php قالب این کار را انجام میدهیم.
آنچه در این مقاله میخوانید
چه وبسایتهایی باید انجام دهند؟
قبل از اینکه برویم سراغ گفتن راه حل شاید شما دارید این مقالهرا میخوانید ولی نمیدانید دقیقا چه وبسایتهایی باید این کار را یعنی حل مشکل آپدیت نشدن لینک دانلود محصولات ووکامرس را روی وبسایت خود انجام دهند.
طبیعتا وبسایتهایی که محصولات دانلودی ارائه میکنند و میخواهند لینکهای دانلود را آپدیت کنند و هم خریداران قبلی و هم خریداران جدید به این لینک دانلود دسترسی داشته باشند و حتی اگر تغییر کرد یا اضافه شد آنرا بتوانند دریافت و مشاهده کنند باید این کار را روی وبسایت خود انجام دهند.
حل مشکل آپدیت نشدن لینک دانلود محصولات ووکامرس
همانطور که گفتیم در ادامه ۲ روش کاربردی برای حل مشکل آپدیت نشدن لینک دانلود و بروزرسانی لینک دانلود محصولات برای خریداران قبلی به شما میگوییم که در روش اول با استفاده از افزونه وردپرس این کاررا انجام میدهیم ولی در روش دوم با استفاده از اضافه کردن یک کد کاربردی به فایل توابع قالبمان این کار را انجام میدهیم.
افزونه ACh Update Woo Download Links
کافی است افزونه ACh Update Woo Download Links را روی سایت خود از مسیر افزونهها > افزودن نصب و فعالسازی کنید و تنظیمات آنرا انجام دهید تا بتوانید این مشکل را به راحتی در وبسایت خود حل کنید و بروزرسانی لینک دانلود محصولات را هم برای خریداران قبلی و هم برای خریداران جدید بدون مشکل انجام دهید.
با کد PHP در فایل functions.php
برای انجام بروزرسانی لینک دانلود محصولات ووکامرس برای خریداران قبلی و حل مشکل آپدیت نشدن لینک دانلود کافی است به فایل functions.php قالب خود بروید. حالا ما برای شما با استفاده از 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' ) );
به همین راحتی میتوانید این کار را انجام دهید. پیشنهاد میکنیم از روش دوم حل مشکل آپدیت نشدن لینک دانلود ووکامرس را پیش ببرید چرا که با اضافه کردن چند خط کد ساده میتوان این کار را انجام داد و نیاز به افزودن یک افزونه و سنگین کردن وبسایتمان نیست.
جمعبندی کلی
در این مقاله آموزشی به شما عزیزان نحوه حل مشکل آپدیت نشدن لینک دانلود محصولات ووکامرس و نحوه بروزرسانی لینک دانلود محصولات به ۲ روش کاربردی توضیح دادیم. در روش اول با استفاده از افزونه ACh Update Woo Download Links این کار را انجام دادیم و در روش دوم با استفاده از کدهای PHP و هوکهای وردپرس. پیشنهادمان این است که از روش دوم پیش بروید چرا که کاربردی تر و سبک تر است.