شرطی کردن درگاه پرداخت ووکامرس بر اساس شرایط مختلف

3.2 / 5. تعداد رای: 26

شرطی کردن درگاه پرداخت ووکامرس بر اساس شرایط مختلف

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

چند وقت پیش (قبل از اینکه سایت Ertano را راه‌اندازی کنیم.) روی میهن وردپرس از پلاگین WPML برای چند زبانه کردن سایت استفاده کردیم. همراه با این پلاگین از افزونه WooCommerce Multilingual برای فروش محصولات به صورت دلاری در زبان‌های مختلف استفاده کردیم. اما یک مشکل اساسی داشتیم! درگاه پرداخت ریالی بانک ملت ما روی زبان انگلیسی هم نمایش داده می‌شد.

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

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

شرطی کردن درگاه پرداخت ووکامرس

اولین چیزی که نیاز دارید ورود به فایل functions.php قالب سایت شما یا ساخت یک افزونه اختصاصی وردپرس هست. حالا باید کمی با PHP آشنایی داشته باشید. البته آشنایی هم نداشته باشید با یک صحیح و خطا انجام میشه. پس زیاد نگران نباشید. 😉

فراخوانی تابعی که خلق خواهیم کرد

وقتی وارد فایل functions.php شدیم. باید ابتدای فایل، کد <?php را پیدا کنید. یک خط بعد از آن یعنی در خط دوم فایل توابع وردپرس، این کد را وارد کنید:

add_filter( 'woocommerce_available_payment_gateways', 'mihanwp_conditional_gateway' );

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

خلق تابع مورد نظر

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

function mihanwp_conditional_gateway( $available_gateways ) {

}

حالا باید داخل تابع بالا، یعنی بین { و } کدهای دلخواه‌مان را اضافه کنیم.

شرط و شروط ما برای نمایش درگاه پرداخت

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

$user = wp_get_current_user();

if ( isset( $available_gateways['mellat'] ) && !is_user_logged_in()) {
        unset( $available_gateways['mellat'] );
}
return $available_gateways;

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

نمایش درگاه پرداخت بر اساس زبان WPML

حالا فرض کنیم می‌خواهیم به ازای زبان‌های مختلف در WPML درگاه‌ها را فعال یا غیرفعال کنیم. پس باید از کد زیر استفاده کنیم.

if(ICL_LANGUAGE_CODE == 'en'){
        unset( $available_gateways['mellat'] );
}
if(ICL_LANGUAGE_CODE == 'fa'){
        unset( $available_gateways['paypal'] );
}
return $available_gateways;

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

هر آنچه که ساختیم

به طور کلی برای شرطی کردن درگاه پرداخت ووکامرس بر اساس زبان‌های مختلف، باید از این کد استفاده کنیم:

add_filter( 'woocommerce_available_payment_gateways', 'mihanwp_conditional_gateway' );

function mihanwp_conditional_gateway( $available_gateways ) {
if(ICL_LANGUAGE_CODE == 'en'){
        unset( $available_gateways['mellat'] );
}
if(ICL_LANGUAGE_CODE == 'fa'){
        unset( $available_gateways['paypal'] );
}
return $available_gateways;
}

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

شاد باشید.

نظر شما در این مورد چیه؟

  1. U337903 ۲۷ خرداد ۱۴۰۳

    سلام چجوری میتونیم از این کد ها برای شرطی کردن روی دسته خاصی از محصولات یک درگاه رو غیر فعال کنیم مثلا روی سایت دسته بندی A و B داریم میخوایم یک درگاه روی دسته های B نشون داده نشه یا روی دسته های A نشون داده بشه….

  2. U338991 ۲۹ بهمن ۱۴۰۲

    سلام … سوالی داشتم
    من به یه مشکل عجیب برای درگاه پرداخت برخوردم … درگاه پرداخت سایتمون سداده … الان مشكلي كه پيش آمده اينه كه بعد از پرداخت در درگاه بانكي در مرورگر سافاري، موقع بازگشت به سايت سريعا صفحه رو نميشناسه و ارور نشون ميده ( safari can’t open this page ) وفقط هم تو مرورگر سافاری ( در ورژنهای مختلفش) این مشکل وجود داره و الان نمیدونم واقعا باید چیکارش کنم؟ … حتی به پشتیبانی سرور و سداد هم پیام دادم ولی مشکل حل نشد … شما راه حلی سراغ دارید؟

  3. U328388 ۸ شهریور ۱۴۰۲

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

    • Reza Rad رضا راد ۱۱ شهریور ۱۴۰۲

      درود بر شما سپاس. مقالاتی که بازدید بالا دارن براشون ویدیو میسازیم. این مدل مقالات رو فقط متن مینویسیم.

  4. U320048 ۱۲ اردیبهشت ۱۴۰۲

    درود بر شما تیم حرفه ایی
    یک سوال داشتم ممنون میشم کمک کنید
    من افزونه WooCommerce Autocomplete Orders برای تایید خودکار سفارشات ووکامرس
    اما قسمت تنظیمات فقط یک گزینه روشنه و بقیه فیلد ها خاموشن
    اون گزینه رو تغییر هم میدم باز بفیه فیلد ها خاموشن
    باید چیکار کنم
    لینک اسکرین شات فرستادم

    • Reza Rad رضا راد ۱۲ اردیبهشت ۱۴۰۲

      سلام ظاهرا یا لایسنس افزونه فعال نیست یا باید فیلد اول رو تغییر بدید به حالتی که بقیه فیلدها روشن بشه

  5. U320048 ۲۰ فروردین ۱۴۰۲

    سلام خسته نباشید
    کاربر من وقتی تا مرحله پرداخت محصول میره(قسمت درگاه پرداخت که شماره کارت رو باید وارد کنه)
    برای من ایمیل میاد که سفارش دریافت شده
    قسمت روش پرداخت هم میزنه پرداخت با زرین پال
    این طبیعیه؟؟!!