هوک های پرداخت در ووکامرس

تعداد بازدید: 1487

WooCommerce یک افزونه وردپرس قابل توسعه است که برای توسعه وب سایت های تجارت الکترونیکی استفاده می شود. تقریباً این افزونه تجارت الکترونیکی برای وردپرس است. آنقدر مهم است که Automattic آن را کاملاً در سال 2015 خریداری کرد.

ووکامرس بر سیستم عامل های تجارت الکترونیکی جهانی تسلط دارد و تقریباً 30٪ از کل فروشگاه های آنلاین را تأمین می کند. این برای فروش همه چیز ، از محصولات استاندارد طبیعی شما ، گرفته تا بلیط رویدادها ، بارگیری دیجیتالی و اشتراک ها به کار می رود. در این پست ، WooCommerce برای فروش بلیط پشتیبانی برای حل مشکلات WooCommerce استفاده می شود! 🙂

بگذارید بگوییم شما با استفاده از WooCommerce بلیط پشتیبانی را از یک وب سایت وردپرس خریداری کرده اید. هنگام خرید بلیط ، از شما خواسته می شود جزئیات ورود خود را ارائه دهید - این قابلیت با استفاده از ویرایشگر زمینه WooCommerce Checkout تنظیم شده است. با ثبت سفارش و پرداخت ، کارکنان پشتیبانی کار شما را شروع می کنند.

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

کاری که ما می خواستیم انجام دهیم این بود که یک روش خودکار برای حذف جزئیات ورود به سیستم پس از تغییر وضعیت سفارش به پایان رسید.

WooCommerce شامل تعدادی قلاب است تا توسعه دهندگان بتوانند ویژگی ها و عملکرد پلاگین را به صورت برنامه نویسی گسترش دهند. و مطمئناً برای WooCommerce یک قلاب عملیاتی وجود دارد تا بتوانیم هنگام تغییر وضعیت سفارش به "تکمیل" ، یک عملکرد را فراخوانی کنیم.

قلاب عملیاتی woocommerce_order_status_completed نامیده می شود و نحوه استفاده شما از این روش است:

add_action( 'woocommerce_order_status_completed', 'your_custom_function_call', 10, 1);

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

عدد 10 اولویت است - اگر هنگام تغییر وضعیت نیاز به اجرای بیش از یک تابع باشد ، هرچه عدد کمتر باشد ، اجرای آن زودتر است. 10 پیش فرض است.

عدد 1 تعداد یا آرگومانهایی است که عملکرد مشخص نشده پذیرفته خواهد شد. باز هم ، 1 به طور پیش فرض است.

حال ، اجازه دهید عملکرد را تعریف کنیم:

// define woocommerce_order_status_completed callback function
function your_custom_function_call( $int ) { 
    // Write your code here
}

این تابع یک آرگومان واحد ، $ int دریافت می کند و در حال حاضر هیچ کاری انجام نمی دهد. اکنون ، ما باید کد سفارشی خود را بنویسیم:

function your_custom_function_call( $order_id ) { 
     delete_post_meta( $order_id, 'customer_username' );
     delete_post_meta( $order_id, 'customer_password' );
     delete_post_meta( $order_id, 'customer_website' ); 
}

در این مثال ، نام کاربری_ مشتری ، مشتری_ گذرواژه و مشتری_ وب سایت موارد اضافی تنظیم شده توسط افزونه Checkout Field Editor هستند. در این مثال ، هر زمان تنظیم یک سفارش انجام می شود ، این عملکرد اجرا می شود. اکنون ، اجازه دهید آن را اصلاح کنیم تا فقط هنگام خرید یک محصول خاص اجرا شود:

function your_custom_function_call( $order_id ) { 
     $order = wc_get_order( $order_id );
     foreach( $order->get_items() as $item ) {
         if ( $item['product_id'] == 123 ) {
             delete_post_meta( $order_id, 'customer_username' );
             delete_post_meta( $order_id, 'customer_password' );
             delete_post_meta( $order_id, 'customer_website' ); 
         }
     }
 }

سرانجام ، اگر می خواهید وقتی سفارشی از یک وضعیت خاص به وضعیت دیگر منتقل می شود عملی را شروع کنید ، می توانیم از قلاب تغییر یافته woocommerce_order_status_ به این ترتیب استفاده کنیم:

add_action( 'woocommerce_order_status_changed', 'your_custom_function_call', 10, 3 );
function your_custom_function_call( $order_id, $old_status, $new_status ) {
    if ( $new_status == "completed" ) {
        delete_post_meta( $order_id, 'customer_username' );
        delete_post_meta( $order_id, 'customer_password' );
        delete_post_meta( $order_id, 'customer_website' );
    }
}

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

سرانجام ، ما می خواهیم بررسی کنیم که تمام سفارشاتی که قبلاً بسته شده اند ، این اطلاعات را از سفارش در ووکامرس پاک کرده اند. به جای نوشتن کد PHP بیشتر برای انجام این کار ، ساده تر است که مستقیماً از پایگاه داده حذف کنید. این به سادگی به این دلیل است که پس از اجرا ، کد جدید PHP دیگر لازم نخواهد بود زیرا عملکرد بالا با تکمیل همه سفارشات جدید را پاک می کند.

قبل از اینکه کاری با پایگاه داده انجام دهیم ، یک نسخه پشتیبان تهیه می کنیم.

سپس ، برای حذف رکورد user_password از پایگاه داده در تمام سفارشاتی که قبلاً انجام شده اند ، این کار را انجام می دهیم:

DELETE FROM wp_postmeta WHERE meta_key='customer_password' AND post_id IN (SELECT ID FROM wp_posts WHERE post_status='wc-completed' AND post_type='shop_order');

بیانیه SELECT شناسه پست هر سفارشی را دریافت می کند (post_type = 'shop_order') که قبلاً تکمیل شده است (post_status = 'wc-Completed').

سپس ، دستور DELETE قسمت postmeta را که می خواهیم حذف شود حذف می کند (meta_key = 'customer_password') اما فقط در هر post_id که در نتایج بیانیه SELECT باشد. یعنی سفارشاتی که قبلاً کامل شده اند.

مطالب تصادفی

Hadi در تاریخ 26 دی 1399

سلام من میخوام یه افزونه بنویسم که اطلاعات کاربر رو پس از سفارش موفق برای عضویت تو یه اسکریپت دیگه بفرسته چیکار باید بکنم؟

سید خلیل حسینی

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

blog-author-image