WooCommerce Troubleshooting

Cart และ Checkout ใน WooCommerce โหลดช้า เกิดจากอะไร

Cart และ Checkout ใน WooCommerce โหลดช้า เกิดจากอะไร

สรุปคำตอบ

Cart และ Checkout ใน WooCommerce โหลดช้ากว่าหน้าอื่นเพราะเป็นหน้า dynamic ที่ต้องคำนวณราคา ส่วนลด ค่าจัดส่ง และ stock ใหม่ทุกครั้ง จึงใช้ full-page cache ไม่ได้และต้องพึ่งความเร็วของ server โดยตรง ต้นเหตุหลักมักเป็น session สะสมในตาราง wp_woocommerce_sessions, wc-cart-fragments ทำงานผิดปกติ และ shipping API ตอบช้า ควรตรวจด้วย Chrome DevTools หรือ Query Monitor ก่อน แล้วแก้ตรงจุด เช่น ล้าง session ที่หมดอายุ ปิด cart fragments ที่ไม่จำเป็น และใช้ Object Cache อย่าง Redis

ถ้าเว็บร้านค้าของคุณกำลังประสบปัญหา Cart หรือ Checkout ใน WooCommerce โหลดช้ากว่าปกติ หรือวนซ้ำค้างจนลูกค้าหมดความอดทนก่อนกดสั่งซื้อ นั่นไม่ใช่แค่เรื่องของ UX — มันส่งผลต่อยอดขายโดยตรง ความเร็วมีผลจริง งานศึกษา Milliseconds Make Millions ที่สรุปไว้ในweb.dev พบว่าเว็บมือถือที่เร็วขึ้นเพียง 0.1 วินาที ทำให้ผู้ใช้เดินต่อไปขั้นถัดไปของ funnel การซื้อมากขึ้นในเกือบทุกขั้นของร้านค้าปลีก บทความนี้จะพาคุณวิเคราะห์ตั้งแต่ต้นทางว่าอะไรทำให้หน้า Cart และ Checkout ช้าเป็นพิเศษ และจะแก้อย่างไรให้ถูกจุด

ทำไม Cart และ Checkout ถึงช้ากว่าหน้าอื่น

หน้า Cart และ Checkout ของ WooCommerce ไม่ใช่หน้าธรรมดา — มันเป็นหน้า dynamic ที่ WordPress และ WooCommerce ต้องประมวลผลใหม่ทุกครั้งที่โหลด เพราะต้องดึงข้อมูล session ของลูกค้า, คำนวณราคา, โค้ดส่วนลด, ค่าจัดส่ง, ภาษี และสถานะ stock แบบ real-time ระบบ Cache จึงไม่ควรเก็บหน้าเหล่านี้ไว้แบบ full-page cache ตามคู่มือ Caching ของ WooCommerce ที่ให้ยกเว้นหน้า Cart, Checkout และ My Account เพราะแสดงข้อมูลเฉพาะของลูกค้าแต่ละคน ส่งผลให้ต้องพึ่งความเร็วของ server โดยตรง

WooCommerce Checkout / จ่ายเงินไม่ได้ — WP Doctor Thailand
ปัญหาหน้า Checkout และการจ่ายเงินใน WooCommerce

สาเหตุหลักที่ทำให้ Cart/Checkout โหลดช้า

  • Plugin ที่แทรก script หรือ AJAX call ในหน้า Checkout มากเกินไป — เช่น plugin ตรวจสอบที่อยู่, validator ฟอร์ม, หรือ upsell popup ที่ยิง request ซ้อนกันหลายตัว
  • Shipping calculator คำนวณช้า — ถ้าคุณใช้ API ของขนส่งภายนอก (เช่น Flash, Kerry, Thailand Post) และ API นั้นตอบกลับช้าหรือ timeout ทุกครั้งที่ลูกค้าเปิดหน้า Cart ระบบก็จะค้างรอ
  • Session handling ที่หนัก — WooCommerce ไม่ใช้ PHP session แต่เก็บ session ของลูกค้าในตารางฐานข้อมูลคู่กับ cookie ตามซอร์สโค้ดของ WC_Session_Handler ถ้า database ช้า หรือมี rows ใน wp_woocommerce_sessions สะสมมากเกินไป หน้า Cart จะโหลดช้าทุกครั้ง ปกติ WooCommerce ตั้งงานล้าง session ที่หมดอายุทุก 12 ชั่วโมงผ่าน Action Scheduler (ดูซอร์สโค้ด) ถ้าตารางยังบวมให้ตรวจว่า WP-Cron และ Action Scheduler ทำงานปกติ
  • Fragment caching ทำงานผิดปกติ — WooCommerce ใช้สคริปต์ wc-cart-fragments เรียก AJAX (get_refreshed_fragments ตามซอร์สโค้ด cart-fragments.js) เพื่ออัปเดตจำนวนสินค้าใน cart header ถ้า request นี้ช้าหรือ error จะทำให้ทั้งหน้าค้าง
  • Hosting tier ต่ำเกินไป — shared hosting ที่ CPU และ memory ถูก throttle จะรู้สึกชัดมากในหน้า dynamic อย่าง Cart/Checkout โดยข้อกำหนดเซิร์ฟเวอร์ของ WooCommerceแนะนำ PHP 8.3 ขึ้นไปและ WordPress memory limit 256 MB ขึ้นไป
  • Plugin Conflict — plugin บางตัวทำงานชนกันในหน้า Checkout ทำให้เกิด JavaScript error หรือ loop ดูรายละเอียดเพิ่มเติมใน Plugin Conflict ใน WooCommerce แก้ยังไง

วิธีตรวจสอบว่าอะไรทำให้ช้า

ก่อนแก้ ต้องรู้ก่อนว่าปัญหาอยู่ที่ไหน ลองทำตามขั้นตอนนี้:

  • เปิด Chrome DevTools → Network tab แล้วโหลดหน้า Cart ดูว่า request ตัวไหนใช้เวลานานที่สุด — มักเป็น /?wc-ajax=get_refreshed_fragments หรือ request ไปยัง shipping API
  • ติดตั้ง Query Monitor plugin ชั่วคราว (Query Monitor เป็นแผงดีบักสำหรับ WordPress และ WooCommerce ที่ดู database query, PHP error, hook และ script ที่โหลดได้) เพื่อดูว่ามี database query กี่ตัว และตัวไหนช้าผิดปกติในหน้า Cart/Checkout
  • ทดสอบด้วยการปิด plugin ทีละตัว (Safe Mode) โดยเฉพาะ plugin ที่เกี่ยวกับ shipping, discount, หรือ checkout fields
  • ตรวจสอบขนาดตาราง wp_woocommerce_sessions ใน phpMyAdmin ถ้ามีหลักล้าน rows ให้สงสัยตารางนี้เป็นอันดับแรก
WooCommerce ออเดอร์/อีเมลไม่เข้า — WP Doctor Thailand
ปัญหา Order และอีเมลแจ้งเตือนใน WooCommerce

วิธีแก้ไขทีละขั้นตอน

1. ล้าง WooCommerce Sessions สะสม

ไปที่ WooCommerce → Status → Tools แล้วกด “Clear customer sessions” (เครื่องมือนี้ล้างทุก session รวมถึงตะกร้าที่ลูกค้ากำลังใช้อยู่ ตามซอร์สโค้ดของเครื่องมือ จึงควรทำในช่วงที่มีลูกค้าน้อย) หรือรัน SQL ใน phpMyAdmin ซึ่งลบเฉพาะ session ที่หมดอายุ:

DELETE FROM wp_woocommerce_sessions WHERE session_expiry < UNIX_TIMESTAMP();

จากนั้นตั้ง cron job หรือใช้ plugin เช่น WP-Optimize ให้ล้าง session อัตโนมัติทุกสัปดาห์

2. ปิด Cart Fragments ถ้าไม่จำเป็น

ถ้าคุณไม่ได้แสดงจำนวนสินค้าใน header สามารถปิด wc-cart-fragments ได้โดยเพิ่ม code นี้ใน functions.php ของธีม:

add_action('wp_enqueue_scripts', function(){ if(!is_cart() && !is_checkout()) wp_dequeue_script('wc-cart-fragments'); });

3. ตรวจสอบและแก้ Shipping Calculator

ถ้า shipping API ภายนอกช้า ให้พิจารณาเพิ่ม timeout และ fallback rate หรือเปลี่ยนไปใช้ flat rate ชั่วคราวเพื่อทดสอบว่าปัญหาหายไปหรือไม่ หากหาย แสดงว่า API ขนส่งคือตัวการ

4. ใช้ Object Cache

ติดตั้ง Redis หรือ Memcached บน server พร้อมปลั๊กอิน persistent cache เพราะตามเอกสาร WP_Object_Cache object cache ค่าเริ่มต้นอยู่ใน memory เฉพาะ request นั้น และ transients จะใช้ cache ถาวรเมื่อมีการตั้งค่าไว้ จึงช่วยเก็บ WooCommerce transients ให้เร็วขึ้น ลด database query ซ้ำซ้อน อ่านเพิ่มเติมเกี่ยวกับการเพิ่มความเร็วใน WooCommerce ช้า แก้อย่างไร

5. ปิด Plugin ที่ไม่จำเป็นในหน้า Checkout

ใช้ plugin เช่น Asset CleanUp หรือ Perfmatters เพื่อ dequeue script และ style ของ plugin อื่นในหน้า Cart/Checkout โดยเฉพาะ slider, gallery, หรือ social share plugin ที่โหลด script ขนาดใหญ่โดยไม่จำเป็น

สรุปสำคัญ: Cart และ Checkout ช้ามักเกิดจาก 3 ต้นเหตุหลัก ได้แก่ session สะสม, wc-cart-fragments ทำงานผิดปกติ และ shipping API ตอบช้า ตรวจสอบด้วย DevTools ก่อนแก้เสมอ เพื่อให้แก้ถูกจุดและไม่เสียเวลา

วิธีป้องกันไม่ให้ช้าซ้ำ

  • ตั้ง schedule ล้าง WooCommerce sessions อัตโนมัติทุกสัปดาห์
  • จำกัดจำนวน plugin ในหน้า Checkout ให้เหลือเท่าที่จำเป็นจริง ๆ
  • ใช้ hosting ที่รองรับ PHP 8.x และมี object cache (Redis) ในตัว
  • ทดสอบความเร็วด้วย https://gtmetrix.com หรือ PageSpeed Insights หลัง deploy ทุกครั้ง
  • ตรวจสอบ error log และ slow query log อย่างน้อยเดือนละครั้ง

เมื่อไหร่ควรเรียกผู้เชี่ยวชาญ

ถ้าคุณทำตามขั้นตอนทั้งหมดแล้วยังช้าอยู่ หรือพบว่า Checkout มีปัญหาซับซ้อนกว่านั้น เช่น กดสั่งซื้อแล้วไม่ผ่าน หรือลูกค้าค้างที่หน้าชำระเงิน แนะนำให้อ่านบทความ WooCommerce Checkout ไม่ได้ กดสั่งซื้อไม่ทำงาน เพิ่มเติม หรือถ้าปัญหาเกี่ยวกับ payment gateway เช่น จ่ายแล้ว order ไม่เข้า สามารถดูที่ WooCommerce Order ไม่เข้า แก้ยังไง สำหรับกรณีที่ต้องการให้ผู้เชี่ยวชาญเข้ามาดูและแก้ไขให้โดยตรง สามารถใช้บริการ แก้ปัญหา WooCommerce ของเราได้เลย

หน้า Cart และ Checkout ใช้ Page Cache ไม่ได้ จึงต้องแก้ที่ฐานข้อมูลและ Script เป็นหลัก ถ้าอยากให้เราไล่ให้ทั้งร้าน ดู บริการทำเว็บ WordPress ให้เร็ว

คำถามที่พบบ่อย

Cart ใน WooCommerce โหลดช้า ต่างจาก Checkout ช้าอย่างไร

Cart ช้ามักเกิดจาก wc-cart-fragments AJAX หรือ session สะสม ส่วน Checkout ช้ามักเกี่ยวกับ shipping API, payment gateway script หรือ plugin ที่แทรก JavaScript ในฟอร์ม ทั้งสองมีสาเหตุต่างกันแต่แก้หลักการเดียวกัน

wc-cart-fragments คืออะไร และทำให้ช้าได้อย่างไร

wc-cart-fragments คือ AJAX request ที่ WooCommerce ยิงทุกครั้งที่โหลดหน้าใด ๆ เพื่ออัปเดตจำนวนสินค้าใน mini cart บน header ถ้า server ช้าหรือ response ใหญ่ request นี้จะทำให้ทุกหน้าบนเว็บรู้สึกช้า ไม่ใช่แค่หน้า Cart

ล้าง WooCommerce sessions แล้วลูกค้าจะเสีย cart ที่ค้างไว้หรือเปล่า

ถ้าล้างเฉพาะ session ที่หมดอายุแล้ว (expired) จะไม่กระทบ session ที่ยังใช้งานอยู่ แต่ถ้าล้างทั้งหมดด้วย "Clear customer sessions" ลูกค้าที่มี cart ค้างอยู่จะถูกล้างด้วย แนะนำทำในช่วงที่ traffic น้อย

Checkout ช้าแต่หน้าอื่นปกติ แสดงว่าปัญหาอยู่ที่อะไร

ถ้าหน้าอื่นเร็วปกติแต่ Checkout ช้า ต้นเหตุมักอยู่ที่ plugin ที่ทำงานเฉพาะในหน้า Checkout (เช่น payment gateway script, address validator) หรือ shipping API ที่ตอบช้า ให้ทดสอบโดยปิด plugin ทีละตัวหรือเปลี่ยน shipping method เป็น flat rate ชั่วคราว

ควรเปิด Cache หน้า Cart และ Checkout เพื่อให้โหลดเร็วขึ้นไหม?

ไม่ควร เพราะหน้า Cart และ Checkout มีข้อมูลเฉพาะของลูกค้าแต่ละคน ถ้าถูก Cache ลูกค้าอาจเห็นตะกร้าหรือราคาผิด ควรยกเว้นหน้าเหล่านี้จาก full-page cache แล้วเร่งความเร็วด้วย Object Cache และลด script ที่ไม่จำเป็นแทน

Object Cache อย่าง Redis ช่วยให้ WooCommerce Checkout เร็วขึ้นได้อย่างไร?

Redis หรือ Memcached เก็บ transients, session และผลลัพธ์ database query ไว้ในหน่วยความจำ ทำให้ไม่ต้อง query ซ้ำทุกครั้งที่โหลดหน้า Cart และ Checkout ต้องติดตั้งบน server หรือเลือก Hosting ที่มีให้ในตัว

แหล่งอ้างอิง

  1. Google (web.dev). (ม.ป.ป.). Milliseconds make millions. สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://web.dev/case-studies/milliseconds-make-millions
  2. WooCommerce. (ม.ป.ป.). Configuring caching plugins. สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://developer.woocommerce.com/docs/best-practices/performance/configuring-caching-plugins
  3. WooCommerce. (ม.ป.ป.). class-wc-session-handler.php (ซอร์สโค้ด). สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/class-wc-session-handler.php
  4. WooCommerce. (ม.ป.ป.). class-woocommerce.php (ซอร์สโค้ด). สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/class-woocommerce.php
  5. WooCommerce. (ม.ป.ป.). cart-fragments.js (ซอร์สโค้ด). สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/client/legacy/js/frontend/cart-fragments.js
  6. WooCommerce. (ม.ป.ป.). class-wc-rest-system-status-tools-v2-controller.php (ซอร์สโค้ด). สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/rest-api/Controllers/Version2/class-wc-rest-system-status-tools-v2-controller.php
  7. WooCommerce. (ม.ป.ป.). Server requirements. สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://woocommerce.com/document/server-requirements/
  8. WordPress.org. (ม.ป.ป.). Query Monitor (ปลั๊กอิน WordPress). สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://wordpress.org/plugins/query-monitor/
  9. WordPress.org. (ม.ป.ป.). WP_Object_Cache. สืบค้นเมื่อ 3 พฤศจิกายน 2026, จาก https://developer.wordpress.org/reference/classes/wp_object_cache/
อ่านบทความหลักของหมวดนี้ WooCommerce Checkout ไม่ได้ เกิดจากอะไร

บทความอื่นในหมวดนี้

LINE ส่งปัญหา