Part of 10306241 ระบบบริหารจัดการเว็บไซต์ (Web Content Management System)

2026-09-28 · updated 2026-10-05 · 7 min read

Lab: ติดตั้ง WooCommerce 10.x บน Docker และเปิดร้านค้าครบวงจร

Lab: ติดตั้ง WooCommerce 10.x บน Docker และเปิดร้านค้าครบวงจร

บทความนี้คือคู่มือแบบฝึกหัดบทที่ 11 (อีคอมเมิร์ซด้วย WooCommerce) ฉบับลงมือทำจริงทุกขั้นตอน — ไม่ใช่แค่สรุปสไลด์ ทุกภาพในบทความนี้เป็นสกรีนช็อตจากร้านจริงที่ติดตั้งบนเครื่องผู้เขียนผ่าน Docker และทุกเครื่องมือที่ใช้เป็นแบบฟรี 100% (WordPress + WooCommerce + MariaDB เป็นโอเพนซอร์ส, การชำระเงินใช้โหมดทดสอบของเกตเวย์ ไม่มีการเรียกเก็บเงินใด ๆ)

ℹ️สิ่งที่ต้องเตรียมก่อนเริ่ม (รายการให้นักศึกษาเช็ค)
  • Docker Desktop ติดตั้งแล้ว (ตรวจ: docker --version และ docker compose version) — ดาวน์โหลดฟรีที่ docker.com และต้องเปิดโปรแกรม Docker Desktop ทิ้งไว้ให้ daemon ทำงาน
  • เบราว์เซอร์ Chrome หรือ Edge (สำหรับคลิกตามคู่มือ)
  • บัญชี Stripe ฟรี (สมัครที่ dashboard.stripe.com/register — ไม่ต้องใช้บัตร ไม่มีค่าใช้จ่าย ใช้เฉพาะ Test Mode)
  • พอร์ตว่าง 8080 (ร้านหลักของเรา), 8081 (phpMyAdmin) และ 8090 (ร้านตัวอย่างที่ใช้ถ่ายภาพประกอบ)
  • เนื้อหาอ้างอิง: สไลด์บทที่ 11 หน้า 34 (ใบงาน 4 ส่วน A-D) และเช็กลิสต์ตรวจผล 10 ข้อหน้า 35

ทำไมต้องรันด้วย Docker

การจำลอง WordPress ในเครื่องด้วย Docker ให้ประโยชน์ตรงกับวิชานี้มาก:

  1. แยกจากเครื่องจริงทั้งหมด - ลบทิ้งได้ครั้งเดียวสะอาดเงา ไม่เปื้อนระบบ
  2. สภาพแวดล้อมเหมือนกันทุกเครื่อง - สอน/ส่งงาน/สอบไม่มีปัญหา "ในเครื่องผมรันได้"
  3. ข้อมูลอยู่ใน volume - ปิดเครื่องรีสตาร์ตร้านยังอยู่ครบ
  4. ใกล้เคียง production - บทถัดไป (บทที่ 12) จะพาขึ้นโฮสติ้งจริง ซึ่งเซิร์ฟเวอร์ส่วนใหญ่ก็รันผ่าน container เช่นกัน

ขั้นที่ 1-2: สร้างไฟล์โปรเจกต์และสตาร์ตระบบ (ผมรันให้แล้ว นักศึกษาคัดลอกไปรันเองได้)

สร้างโฟลเดอร์ woocommerce-lab แล้วสร้างไฟล์ docker-compose.yml ดังนี้:

YAML
services:
  db:
    image: mariadb:10.11
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: wslab-root
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wslab-pass
    volumes:
      - db_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
      interval: 10s
      timeout: 5s
      retries: 5
 
  wordpress:
    image: wordpress:latest
    restart: unless-stopped
    depends_on:
      db:
        condition: service_healthy
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wslab-pass
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wp_data:/var/www/html
 
  phpmyadmin:
    image: phpmyadmin:latest
    restart: unless-stopped
    depends_on:
      - db
    ports:
      - "8081:80"
    environment:
      PMA_HOST: db
 
volumes:
  db_data:
  wp_data:

ตัวแปร WORDPRESS_DB_HOST/USER/PASSWORD/NAME เหล่านี้เป็นรูปแบบมาตรฐานที่อิมเมจ WordPress ทางการรองรับ (ดู เอกสารอิมเมจ WordPress บน Docker Hub) จากนั้นสั่ง:

BASH
docker compose up -d
docker compose ps          # ตรวจว่าทุก container Up

ผลที่ต้องเห็น: db สถานะ healthy, wordpress และ phpmyadmin ทำงานบนพอร์ต 8080/8081 แล้วเปิด http://localhost:8080 ได้หน้าติดตั้ง WordPress

ขั้นที่ 3: ติดตั้ง WordPress (นักศึกษาทำแล้ว)

เปิด http://localhost:8080 เลือกภาษา ตั้งชื่อไซต์ สร้างผู้ดูแล (admin + รหัสที่จดไว้) แล้วกด Install WordPress — หน้าจอมาตรฐาน 5 นาทีของ WordPress

หน้าแรกของไซต์ WordPress หลังติดตั้งเสร็จ ยังเป็นธีมเปล่า
ภาพ 3.1 หน้าแรกไซต์หลังติดตั้ง WordPress เสร็จ (ธีม Twenty Twenty-Five)

ขั้นที่ 4: ติดตั้ง WooCommerce และตั้งค่าร้าน (ใบงาน A1-A2)

ไปที่ Plugins → Add New Plugin ค้นหา "WooCommerce" เลือกตัวของ Automattic กด Install Now → Activate จากนั้นตัวช่วยตั้งค่า (Setup Wizard) จะพาไล่ถาม:

  1. รายละเอียดร้าน - ประเทศ: Thailand, เมือง: เชียงใหม่, รหัสไปรษณีย์: 50290
  2. อุตสาหกรรม - เลือกหมวดที่สนใจ (เช่น Food and drink)
  3. ประเภทสินค้า - ข้ามส่วนขยายเสียเงินทั้งหมด (หัวใจของแล็บนี้คือฟรี 100%)
  4. ธีม - เลือกฟรีตัวแรก

หลังจบตัวช่วย ตรวจที่ WooCommerce → Settings → General ว่าสกุลเงินเป็น Thai Baht (฿) แล้วกด Save

หน้า WooCommerce Home ในแดชบอร์ดผู้ดูแล แสดงเมนูจัดการร้านค้า
ภาพ 4.1 หน้า WooCommerce Home หลังเปิดใช้งาน — ศูนย์กลางการจัดการร้าน

สังเกตเมนูด้านซ้ายจะมีเพิ่ม: WooCommerce (Home/Orders/Analytics), Products, Analytics — ครบตามสไลด์หน้า 15

💡ช่วงนี้พลาดตัวช่วยตั้งค่าได้ ไม่ต้องลงใหม่

ทุกค่าที่ตัวช่วยถามแก้ทีหลังได้ที่ WooCommerce → Settings ทั้งหมด (ทั่วไป/สินค้า/จัดส่ง/การชำระเงิน/อีเมล) ตามสไลด์หน้า 13

ขั้นที่ 5: สร้างสินค้า Simple และ Variable (ใบงาน A3-A4)

สินค้า Simple - Organic Coffee Beans 250g

Products → Add New ตั้งชื่อสินค้า เขียนคำอธิบาย แล้วตั้งค่าในกล่อง Product data:

  • General → Regular price: 250
  • Inventory → SKU: COFFEE-250, เปิด "Track stock quantity", คงเหลือ 50

ใส่หมวดหมู่ (Coffee), แท็ก (coffee, organic), รูปสินค้า แล้วกด Publish

หน้าร้านค้าแสดงสินค้าทั้งหมด
ภาพ 5.1 หน้าร้านค้า (/shop/) แสดงสินค้า Simple และ Variable ในกริด
หน้าสินค้า Simple แสดงราคา 250 บาทและปุ่มใส่ตะกร้า
ภาพ 5.2 หน้าสินค้า Simple Organic Coffee Beans 250g ราคา 250 บาท มีปุ่มเพิ่มในตะกร้า

สินค้า Variable - Handmade T-Shirt (S และ M ราคาต่างกัน)

สร้างใหม่อีกชิ้น เลือก Product data → Variable product แล้ว:

  1. แท็บ Attributes → เพิ่ม attribute ชื่อ Size ค่า S | M → ติ๊ก Used for variations → Save attributes
  2. แท็บ Variations → กด Generate variations → ได้ 2 แถว
  3. ขยายแต่ละแถวตั้งราคา: S = 300, M = 350 (ใส่ SKU ต่างกันได้ เช่น TSHIRT-S / TSHIRT-M) → Save changes
หน้าสินค้า Variable แสดงตัวเลือกไซซ์ S/M
ภาพ 5.3 หน้าสินค้า Variable ให้เลือกไซซ์ และราคาเปลี่ยนตามตัวเลือก

หมวดหมู่ Featured Items (ใบงาน A5) สร้างที่ Products → Categories → ตั้งชื่อ → Add New Category

ขั้นที่ 6: Block Cart และ Block Checkout (ใบงาน B1-B5)

ตั้งแต่ WooCommerce 8.3 ร้านใหม่ทุกแห่งใช้ Cart และ Checkout แบบบล็อก (React) เป็นค่าเริ่มต้น — ไม่ใช่ shortcode แบบเก่าอีกต่อไป ตรวจได้โดยเปิด Pages → Cart → Edit จะพบบล็อก Cart ในตัวแก้ไข (ถ้าเจอ [woocommerce_cart] ให้ลบแล้วแทรกบล็อก Cart แทน)

หน้าตะกร้าแบบ Block Cart มีตะกร้าสินค้าจริง
ภาพ 6.1 หน้าตะกร้าสินค้า (Block Cart) แสดงสินค้า ยอดรวม และช่องคูปอง

การเพิ่มช่อง Order Note ทำผ่านหน้าแก้ไข Checkout: เปิด List View (ไอคอน 3 เส้นบนมุมบล็อก) จะเห็นบล็อกลูก Contact Information / Shipping Address (+ Order notes) / Shipping Options / Payment / Order Summary จัดลำดับ ซ่อน/แสดงช่องได้จากแผงตั้งค่าของแต่ละบล็อก

หน้า Checkout แบบบล็อก กรอกที่อยู่ผู้รับสินค้าเรียบร้อย
ภาพ 6.2 Block Checkout หลังกรอกข้อมูลผู้รับ (ที่อยู่ไทย) มีช่องเลือกวิธีจัดส่งและวิธีชำระเงิน
⚠️นักพัฒนาต้องระวัง

PHP hook ที่เคยใช้กับหน้า Checkout แบบเก่า อาจไม่ทำงาน กับ Block Checkout — การปรับแต่งต้องใช้ Store API และส่วนขยายแบบบล็อก (สไลด์หน้า 24) ทดสอบปลั๊กอินทุกตัวก่อนอัปเกรดร้านจริง

ขั้นที่ 7: ตั้งค่าการจัดส่ง - Flat Rate 50 บาท + ส่งฟรีเมื่อยอดถึง 500 (ใบงาน D1-D3)

ไปที่ WooCommerce → Settings → Shipping → Add Zone:

  1. ตั้งชื่อโซน Thailand เลือกภูมิภาค: ประเทศไทย
  2. Add shipping method → Flat rate → แก้ Cost เป็น 50
  3. Add shipping method → Free shipping → กด Edit → "Minimum order amount" = 500
หน้าตั้งค่า Shipping Zones ใน wp-admin แสดงโซน Thailand
ภาพ 7.1 โซนจัดส่ง Thailand พร้อมวิธีจัดส่ง 2 แบบ (Flat rate + Free shipping)

ผลที่ทดสอบได้จริงเมื่อตะกร้ามีกาแฟ 250 + เสื้อ M 350 = 600 บาท (เกิน 500) — หน้าชำระเงินจะให้เลือก ส่งฟรี ได้:

หน้าชำระเงินแสดงตัวเลือกส่งฟรีเมื่อยอดถึง 600 บาท
ภาพ 7.2 ตะกร้า 600 บาท ขึ้นตัวเลือก ส่งฟรียอดสั่งซื้อ 500 บาทขึ้นไป ให้เลือกอัตโนมัติ

ส่วนตะกร้าที่ต่ำกว่า 500 บาท จะเห็นแค่ Flat Rate ฿50 อย่างเดียว — ทดสอบทั้งสองกรณีก่อนส่งงาน

ขั้นที่ 8: เกตเวย์การชำระเงินและคำสั่งซื้อทดสอบ (ใบงาน C, เช็กลิสต์ข้อ 6-7)

ในแล็บนี้เราใช้เกตเวย์ในโหมดทดสอบทั้งหมด ไม่มีการตัดเงินจริง:

8.1 เกตเวย์ฟรีในตัว (COD + โอนธนาคาร)

WooCommerce → Settings → Payments เปิด Cash on delivery และ Direct bank transfer ใช้ทดสอบ flow การสั่งซื้อได้ทันทีโดยไม่ต้องสมัครอะไร

หน้าตั้งค่าการชำระเงินแสดงเกตเวย์ที่เปิดใช้งาน
ภาพ 8.1 หน้า Payments: เปิด COD และโอนธนาคาร พร้อมช่องสำหรับปลั๊กอินเกตเวย์อื่น

8.2 Stripe Test Mode (แนะนำ - ฝึกบัตรเครดิตจำลอง)

  1. สมัครบัญชีฟรีที่ dashboard.stripe.com/register
  2. ติดตั้งปลั๊กอิน "WooCommerce Stripe Payment Gateway" (โดย WooCommerce/Stripe) จากหน้า Plugins
  3. ใน Stripe Dashboard เปิด Test mode → Developers → API keys → คัดลอก pk_test_... และ sk_test_...
  4. WooCommerce → Settings → Payments → Stripe → วาง Test keys → เปิด test mode → Save
  5. ทดสอบชำระด้วยบัตรจำลอง 4242 4242 4242 4242, วันหมดอายุอนาคตอะไรก็ได้ (เช่น 12/34), CVC 3 หลักอะไรก็ได้ — หมายเลขนี้เป็นบัตรทดสอบทางการของ Stripe (docs.stripe.com/testing) ไม่มีการหักเงินจริง
📌ทำไม PayPal Standard ถึงไม่อยู่ในบทเรียนนี้

สไลด์หน้า 27 ระบุตรงกันกับเอกสารของ WooCommerce ว่า PayPal Standard ถูกแทนที่ด้วยปลั๊กอิน PayPal Payments (Orders v2) และถูกถอดออกจากแกนตั้งแต่ WooCommerce 9.0 หากจะฝึก PayPal จริงต้องติดตั้งปลั๊กอิน PayPal Payments และทดสอบผ่าน Sandbox ที่ developer.paypal.com (สมัครบัญชีฟรีเช่นกัน)

8.3 สั่งซื้อทดสอบจนได้ออเดอร์ Processing

จำลองเป็นลูกค้า: เพิ่มสินค้า → ชำระเงิน → กรอกที่อยู่ → เลือกวิธีชำระ (COD จะให้สถานะ Processing ทันที / โอนธนาคารจะเป็น On hold รอยืนยัน) → กดสั่งซื้อ

หน้า Order received หลังสั่งซื้อสำเร็จ
ภาพ 8.2 หน้ายืนยันคำสั่งซื้อ (Order received) หลังกดสั่งซื้อสำเร็จ แสดงเลขออเดอร์ ยอดรวม และวิธีจัดส่ง

ขั้นที่ 9: จัดการคำสั่งซื้อและ Analytics (ใบงาน D4-D5)

สถานะคำสั่งซื้อ (สไลด์หน้า 32)

สถานะความหมายสิ่งที่ต้องทำ
Pending paymentสร้างแล้ว รอลูกค้าจ่ายรอ / ตามชำระ
On holdรอตรวจสอบ (เช่น โอนเงิน)เช็คสลิปแล้วเปลี่ยนเป็น Processing
Processingจ่ายแล้ว กำลังเตรียมของแพ็กของ → จัดส่ง → Completed
Completedส่งมอบแล้วปิดงาน
Cancelled / Refundedยกเลิก / คืนเงินบันทึกเหตุผล
รายการคำสั่งซื้อใน wp-admin แสดง 2 ออเดอร์
ภาพ 9.1 หน้า Orders แสดงออเดอร์ #21 (On hold - โอนเงิน) และ #24 (Processing - COD)
หน้ารายละเอียดออเดอร์ COD สถานะ Processing
ภาพ 9.2 ออเดอร์ #24 สถานะ Processing ชำระแบบเก็บเงินปลายทาง พร้อมข้อมูลผู้ซื้อและยอดรวม

WooCommerce Analytics + COGS (ใหม่ใน WC 9.0+)

Analytics → Overview/Revenue แสดงรายได้จากออเดอร์ทดสอบทันที และถ้าใส่ "Cost" ต่อสินค้า (Product data → General) ระบบจะคำนวณ Profit ให้ด้วย — บอกได้ว่าสินค้าตัวไหน "กำไรจริง" ไม่ใช่แค่ "ขายดี"

Analytics Overview แสดงยอดจากคำสั่งซื้อทดสอบ
ภาพ 9.3 หน้า Analytics → Overview หลังมีคำสั่งซื้อทดสอบ 2 รายการ
Analytics Revenue แสดงรายได้สุทธิ
ภาพ 9.4 Analytics → Revenue: ยอดขายรวม 300 บาทจากออเดอร์ Processing
หน้ารายการสินค้าใน wp-admin
ภาพ 9.5 รายการสินค้า: Simple และ Variable พร้อม SKU/สต็อก/ราคา

เช็กลิสต์ตรวจผล 10 ข้อ (หน้า 35 ของสไลด์)

#รายการตรวจที่ผลที่คาดหวัง
1WooCommerce เปิดใช้งานDashboard → PluginsWooCommerce ปรากฏและ Active
2สินค้า Simple แสดงProducts → All Productsขึ้นชื่อ/ราคาถูกต้อง
3Variable 2 ไซซ์ ราคาต่างกันแท็บ VariationsS=300, M=350
4Block CartPages → Cart → Editเห็น Cart Block ไม่ใช่ shortcode
5Block CheckoutPages → Checkout → Editเห็น Checkout Block
6เกตเวย์เชื่อมแล้วSettings → PaymentsCOD/BACS เปิด (+ Stripe test keys)
7ออเดอร์ทดสอบ ProcessingWooCommerce → Ordersออเดอร์ COD สถานะ Processing
8โซนจัดส่งไทย Flat Rate 50Settings → Shippingโซน Thailand + ฿50
9ส่งฟรี ≥ 500ทดสอบตะกร้า 600เห็นตัวเลือกส่งฟรี
10Analytics แสดงรายได้Analytics → Revenueยอดตรงกับออเดอร์ทดสอบ

ทุกข้อในตารางนี้ทำได้จริงในแล็บนี้และมีภาพประกอบครบตามลำดับข้างต้น

คำสั่งจัดการระบบที่ควรรู้

BASH
docker compose stop      # ปิดร้าน (ข้อมูลยังอยู่)
docker compose start     # เปิดร้านต่อ
docker compose down      # ลบ container (ข้อมูลใน volume ยังอยู่)
docker compose down -v   # ลบทั้งหมด เริ่มใหม่จากศูนย์ (ระวัง!)

สรุป

จากใบงานสไลด์หน้า 34-35 เราได้ครบทุกส่วน: A (ติดตั้ง + สินค้า Simple/Variable/หมวดหมู่), B (Block Cart/Checkout + Order Note + ทดสอบตะกร้า), C (เกตเวย์ + สั่งซื้อทดสอบได้ออเดอร์จริง), D (Shipping Zones + Analytics) — โดยไม่ใช้เงินแม้แต่บาทเดียว ทักษะชุดนี้คือฐานของบทถัดไป (บทที่ 12): การนำร้านขึ้นโฮสติ้งจริงด้วย Cloudflare, Git Deploy และ Staging → Production

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

🚨ข้อจำกัดของบทความ

อิมเมจ wordpress:latest และ woocommerce ในบทความเป็นเวอร์ชันล่าสุด ณ วันที่ทดลอง (กันยายน 2026 — WordPress 7.1.2) หน้าจอในเวอร์ชันอื่นอาจต่างเล็กน้อย ราคา/ค่าธรรมเนียมเกตเวย์ที่อ้างในสไลด์เป็นข้อมูลเชิงการสอน ควรตรวจกับผู้ให้บริการจริงก่อนใช้งานจริง

By Watcharin Sarachai