رفتن به مطلب

مشکل در لینک‌های ووکامرس


پست های پیشنهاد شده

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

لینک به ارسال
  • 3 هفته بعد...

سلام

منم همین مشکلو دارم

برای محصولات دانلودی تا زمانی که در بخش سفارشات ایمیل وارد نشه دانلود ارور میده و میگه "لینک دانلود نادرست است"

ثبت نام سایت ما با شماره هست و ایمیلی نمیگیریم

لینک به ارسال
  • 2 هفته بعد...
  • 1 ماه بعد...
در در ۱۳۹۹/۱۰/۱۵ در 19:17، Morteza گفته است :

شما هم تست کنین ایمیل رو تنظیم کنین ببینید درست میشه؟

بله وقتی ایمیل تنظیم بشه درست میشه

چون ثبت نام با شماره تلفن هست و دیگر ایمیل نیاز نیست این مشکل اصولا پیش میاد

لینک به ارسال

سلام. من هم این مشکل رو دارم.

در لینک زیر صراحتا اشاره شده که این مشکل به خاطر عدم ثبت ایمیل در مشخصات کاربره.

https://wordpress.org/support/topic/invalid-download-link-go-to-shop-error/

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

راه حلش رو نمی‌دونم. در لینک بالا توضیحاتی درباره راه حل داده یک سری نشونه هم داده ولی گفته که نیاز به برنامه نویسی داره و پول میگیره تا انجامش بده. امیدوارم دوستان در اینجا بتونند راه حلی ارائه کنند. 

لینک به ارسال
در در ۱۳۹۹/۱۱/۲۰ در 18:52، aminjabari گفته است :

سلام. من هم این مشکل رو دارم.

در لینک زیر صراحتا اشاره شده که این مشکل به خاطر عدم ثبت ایمیل در مشخصات کاربره.

https://wordpress.org/support/topic/invalid-download-link-go-to-shop-error/

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

راه حلش رو نمی‌دونم. در لینک بالا توضیحاتی درباره راه حل داده یک سری نشونه هم داده ولی گفته که نیاز به برنامه نویسی داره و پول میگیره تا انجامش بده. امیدوارم دوستان در اینجا بتونند راه حلی ارائه کنند. 

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

لینک به ارسال
  • 1 ماه بعد...

من الان این مشکل رو به صورت دستی حل کردم. 

بعد از اینکه کاربر سفارشی رو ثبت می‌کنه،‌ سفارش رو ویرایش می کنم و به قول شما یک ایمیل فیک بهش اضافه می کنم. با این کار لینک ها درست میشن

 

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

ممنون

لینک به ارسال
  • 2 ماه بعد...
  • 4 ماه بعد...

برای رفع این مشکل:

به این مسیر برید: plugins/woocommerce/includes

فایل class-wc-download-handler.php رو باز کنید

کدهای زیر رو از فایل پاک کنید:

کد اول:

        // Fallback, accept email address if it's passed.
        if ( empty( $_GET['email'] ) && empty( $_GET['uid'] ) ) { // WPCS: input var ok, CSRF ok.
            self::download_error( __( 'Invalid download link.', 'woocommerce' ) );
        }

 

کد دوم:
 

        if ( isset( $_GET['email'] ) ) { // WPCS: input var ok, CSRF ok.
            $email_address = wp_unslash( $_GET['email'] ); // WPCS: input var ok, CSRF ok, sanitization ok.
        } else {
            // Get email address from order to verify hash.
            $email_address = is_a( $order, 'WC_Order' ) ? $order->get_billing_email() : null;

            // Prepare email address hash.
            $email_hash = function_exists( 'hash' ) ? hash( 'sha256', $email_address ) : sha1( $email_address );

            if ( is_null( $email_address ) || ! hash_equals( wp_unslash( $_GET['uid'] ), $email_hash ) ) { // WPCS: input var ok, CSRF ok, sanitization ok.
                self::download_error( __( 'Invalid download link.', 'woocommerce' ) );
            }
        }

 

موفق باشید...

ویرایش شده توسط navidsincere
لینک به ارسال
در 2 ساعت قبل، navidsincere گفته است :

برای رفع این مشکل:

به این مسیر برید: plugins/woocommerce/includes

فایل class-wc-download-handler.php رو باز کنید

کدهای زیر رو از فایل پاک کنید:

کد اول:


        // Fallback, accept email address if it's passed.
        if ( empty( $_GET['email'] ) && empty( $_GET['uid'] ) ) { // WPCS: input var ok, CSRF ok.
            self::download_error( __( 'Invalid download link.', 'woocommerce' ) );
        }

 

کد دوم:
 


        if ( isset( $_GET['email'] ) ) { // WPCS: input var ok, CSRF ok.
            $email_address = wp_unslash( $_GET['email'] ); // WPCS: input var ok, CSRF ok, sanitization ok.
        } else {
            // Get email address from order to verify hash.
            $email_address = is_a( $order, 'WC_Order' ) ? $order->get_billing_email() : null;

            // Prepare email address hash.
            $email_hash = function_exists( 'hash' ) ? hash( 'sha256', $email_address ) : sha1( $email_address );

            if ( is_null( $email_address ) || ! hash_equals( wp_unslash( $_GET['uid'] ), $email_hash ) ) { // WPCS: input var ok, CSRF ok, sanitization ok.
                self::download_error( __( 'Invalid download link.', 'woocommerce' ) );
            }
        }

 

موفق باشید...

سلام. واقعا الان این رو بعنوان راهکار دارید ارائه میدید به کاربران انجمن؟

لینک به ارسال
در 12 ساعت قبل، yazdaniwp گفته است :

سلام. واقعا الان این رو بعنوان راهکار دارید ارائه میدید به کاربران انجمن؟

بله. مشکلش چیه؟

این کدها خطاهای مربوط به ایمیل در لینک دانلود هست.

اون عزیزانی که کلا با ایمیل سر و کار ندارن و همه چیز با شماره همراه صورت میگیره(طبق گفته خود دوستان)، لینک رو بدون در نظر گرفتن حالت خطای ایمیل در اختیار کاربر میزاره.

 

لینک به ارسال

مشکلش اینه که دستکاری مستقیم توی کدهای افزونه یا وردپرس کاری کاملا غیر استاندارد هست :)

لینک به ارسال

4 ماه از آخرین پست این تاپیک میگذره، کسی نتونسته جوابی براش پیدا کنه. چه اینجا چه هر جای دیگه!

اینو گذاشتم اونایی که دوس دارن میتونن انجام بدن.

دستکاری مستقیم هست، بله، اما میتونن یه کپی از فایل مورد نظر داشته باشن برای آینده اگه نیازشون شد(که نمیشه). چون مشخصه چه کدی داره حذف میشه و به چیز دیگه ای آسیبی وارد نمیشه.

لینک به ارسال
در 10 ساعت قبل، navidsincere گفته است :

4 ماه از آخرین پست این تاپیک میگذره، کسی نتونسته جوابی براش پیدا کنه. چه اینجا چه هر جای دیگه!

اینو گذاشتم اونایی که دوس دارن میتونن انجام بدن.

دستکاری مستقیم هست، بله، اما میتونن یه کپی از فایل مورد نظر داشته باشن برای آینده اگه نیازشون شد(که نمیشه). چون مشخصه چه کدی داره حذف میشه و به چیز دیگه ای آسیبی وارد نمیشه.

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

لینک به ارسال
در در ۱۴۰۰/۳/۴ در 21:18، efi081 گفته است :

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

نمیشه راهی پیدا کرد تا ساخت لینک دانلود از راه دیگه ای انجام بشه؟

سلام. این کد رو تست کنید. من کدی که قبلاً نوشتم رو نمیتونم عمومی منتشر کنم ولی این کد منطقا باید کار کنه.

<?php

/**
 * Sync wc with DIGITS plugin
 */
function ywp_sync_digits_with_wc( $customer_id, $new_customer_data, $password_generated ) {
	$user = get_user_by( 'id', $customer_id );
	
	if ( $user && property_exists( $user, 'user_email' ) && empty( $user->user_email ) ) {
		$fake_mail = sprintf( 
			'user_%d@%s',
			$customer_id * 13,
			ywp_cleanup_domain(),
		);
		
		wp_update_user( array(
			'ID' 		 => $customer_id,
			'user_email' => sanitize_email( $fake_mail ),
		) );
	}
}

add_action( 'woocommerce_created_customer', 'ywp_sync_digits_with_wc', 10, 3 );

/**
 * Remove url schema
 */
funtion ywp_cleanup_domain() {
	$home 	  	 = get_home_url();
	$protocol 	 = '#^http(s)?://#';
    $www	  	 = '/^www\./';
    $pure_domain = preg_replace( $protocol, '', $home );
    $pure_domain = preg_replace( $www, '', $home );
    
	return rtrim( $pure_domain, '/' );
}

// The code goes to your active theme(or child theme) functions.php file

این کد، موقع ثبت نام کاربر یه ایمیل فیک به حسابش اضافه میکنه و باعث میشه که مشکلی برای دانلود نداشته باشه.

لینک به ارسال

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...