Barebones Headless เป็นธีม WordPress ที่ออกแบบมาเพื่อให้คุณใช้ WordPress เป็น Headless CMS ได้อย่างง่ายดาย โดยทำงานร่วมกับ Next.js หรือ Nuxt.js ได้อย่างลงตัว รองรับฟีเจอร์เจ๋งๆ เช่น GraphQL และระบบ Revalidation (การอัปเดตข้อมูลอัตโนมัติ)
- WordPress: เวอร์ชัน 6.7 ขึ้นไป
- PHP: เวอร์ชัน 8.0 ขึ้นไป
- MySQL: เวอร์ชัน 5.7 ขึ้นไป
-
WPGraphQL (จำเป็น)
- ใช้เพิ่ม GraphQL API เพื่อดึงข้อมูลจาก WordPress
- ถ้าใช้ ACF ต้องติดตั้งปลั๊กอิน ACF to WPGraphQL เพิ่มด้วย
- ดาวน์โหลด: wordpress.org/plugins/wp-graphql/
-
Headless Login for WPGraphQL (จำเป็น)
- ใช้สำหรับระบบล็อกอินและการยืนยันตัวตน
- ต้องใช้คู่กับ WPGraphQL
- ดาวน์โหลด: github.com/AxeWP/wp-graphql-headless-login/
-
WPGraphQL for Rank Math SEO (จำเป็น)
- ใช้สำหรับสร้าง GraphQL SEO
- ต้องใช้คู่กับ WPGraphQL, Rank Math SEO
- ดาวน์โหลด: github.com/AxeWP/wp-graphql-rank-math/
-
Advanced Custom Fields (ACF) (แนะนำ)
- ช่วยสร้างฟิลด์ข้อมูลพิเศษตามที่คุณต้องการ
- รองรับทั้ง REST API และ GraphQL
- ดาวน์โหลด: wordpress.org/plugins/advanced-custom-fields/
-
ACF to WPGraphQL (ถ้าใช้ ACF กับ GraphQL)
- เชื่อมข้อมูลจาก ACF เข้ากับ GraphQL
- ดาวน์โหลด: wordpress.org/plugins/wpgraphql-acf/
- ดาวน์โหลดธีมแล้ววางไว้ในโฟลเดอร์
wp-content/themes/ - เข้าไปที่ WordPress Admin แล้วเปิดใช้งานธีม
- ตั้งค่า Permalink เป็น "Post name" ที่
Settings > Permalinks
-
ตั้งค่าใน WordPress Admin
- ไปที่
Theme Settingsแล้วกรอก:- Frontend URL: ลิงก์หน้าเว็บของคุณ (เช่น
https://mywebsite.com) - Blog Base: ชื่อเส้นทางของบล็อก (เช่น
blog) - Preview Secret: รหัสลับสำหรับดูตัวอย่าง
- Revalidation Token: รหัสลับสำหรับอัปเดตข้อมูล
- Frontend URL: ลิงก์หน้าเว็บของคุณ (เช่น
- ไปที่
-
ตั้งค่าผ่าน
wp-config.php(ถ้าต้องการความปลอดภัยสูง)- เพิ่มโค้ดนี้ในไฟล์
wp-config.php:
- เพิ่มโค้ดนี้ในไฟล์
define('BBH_FRONTEND_URL', 'https://mywebsite.com'); // URL หน้าเว็บ
define('BBH_BLOG_BASE', 'blog'); // เส้นทางบล็อก
define('BBH_PREVIEW_SECRET', 'my-preview-secret'); // รหัสลับสำหรับดูตัวอย่าง
define('BBH_REVALIDATION_SECRET', 'my-revalidation-secret'); // รหัสลับสำหรับอัปเดตข้อมูล- ตั้งค่าระบบดูตัวอย่าง (Preview)
- ติดตั้งปลั๊กอิน Headless Login for WPGraphQL
- เข้าไปที่
GraphQL > Settings > Headless Login > Providers > Password - เปิดใช้งาน "Password Provider" แล้วกดบันทึก
- ไปที่
GraphQL > GraphiQL IDEแล้วรันโค้ดนี้ (เปลี่ยนusernameและpasswordเป็นของจริง):
mutation {
login(input: { provider: PASSWORD, credentials: { username: "admin", password: "123456" } }) {
authToken
refreshToken
}
}- คัดลอก
refreshTokenที่ได้ แล้วเพิ่มในไฟล์.env.localของ Next.js/Nuxt.js:
NEXTJS_AUTH_REFRESH_TOKEN="your-refresh-token-here"- เสร็จแล้ว! คุณสามารถดูโพสต์แบบร่างได้โดยคลิก "Preview" ใน WordPress Admin
add_action('bbh_after_revalidate', function(array $paths, $response) {
// แสดงข้อความเมื่ออัปเดตข้อมูลเสร็จ
if (!is_wp_error($response)) {
error_log('Revalidation เสร็จแล้วสำหรับ: ' . implode(', ', $paths));
}
});นี่คือ Filters ทั้ง 4 ตัวที่คุณสามารถใช้ปรับแต่งธีมได้ พร้อมตัวอย่างการใช้งานจริง:
- ใช้ทำอะไร: เปลี่ยน URL ที่ใช้ส่งคำขอ Revalidation ไปยัง Frontend
- ตัวอย่างโค้ด:
add_filter('bbh_frontend_revalidate_url', function() {
// เปลี่ยนไปใช้ API endpoint อื่นของ Frontend
return "https://mywebsite.com/custom-api/revalidate";
});- อธิบาย: ถ้า Frontend ของคุณใช้ URL อื่นที่ไม่ใช่ค่าเริ่มต้น (เช่น
/api/revalidate) คุณสามารถปรับที่นี่ได้
- ใช้ทำอะไร: ปรับเปลี่ยนรายการเส้นทาง (paths) ที่จะส่งไป Revalidate เมื่อโพสต์มีการอัปเดต
- ตัวอย่างโค้ด:
add_filter('bbh_revalidate_paths', function(array $paths, WP_Post $post) {
// เพิ่มเส้นทางพิเศษ เช่น หน้า category ของโพสต์
$category = get_the_category($post->ID)[0]->slug;
$paths[] = "/category/" . $category;
return $paths;
}, 10, 2);- อธิบาย: สมมติคุณอยากให้หน้า Category อัปเดตด้วยเมื่อโพสต์มีการเปลี่ยนแปลง โค้ดนี้จะเพิ่มเส้นทางนั้นเข้าไป
- ใช้ทำอะไร: ปรับเปลี่ยนเส้นทาง (paths) ที่เกี่ยวข้องกับ Term (เช่น Category หรือ Tag) ก่อนส่งไป Revalidate
- ตัวอย่างโค้ด:
add_filter('bbh_revalidation_term_paths', function(array $paths, WP_Term $term) {
// เพิ่มหน้าหลักของ taxonomy เข้าไปด้วย
$paths[] = "/all-" . $term->taxonomy;
return $paths;
}, 10, 2);- อธิบาย: ถ้าคุณมีหน้าแสดงรายการ Term ทั้งหมด (เช่น
/all-categories) โค้ดนี้จะเพิ่มเข้าไปใน Revalidation
- ใช้ทำอะไร: กำหนดโดเมนที่อนุญาตให้ส่งข้อมูล Revalidation เข้ามาที่ WordPress
- ตัวอย่างโค้ด:
add_filter('bbh_allowed_revalidate_domains', function(array $domains) {
// เพิ่มโดเมนพิเศษที่อนุญาต
$domains[] = "https://staging.mywebsite.com";
return $domains;
});- อธิบาย: ถ้าคุณมีเว็บ Staging หรือโดเมนอื่นที่ต้องการให้เชื่อมต่อได้ เพิ่มเข้าไปในลิสต์นี้
ระบบจะอัปเดตข้อมูลให้เองเมื่อ:
- บันทึกหรือแก้ไขโพสต์/หน้า
- อัปเดตเมนู
- ลบโพสต์/หน้า
ใช้คำสั่งนี้ใน Terminal:
curl -X POST https://mywebsite.com/api/revalidate \
-H "Content-Type: application/json" \
-H "X-Revalidate-Token: my-revalidation-secret" \
-d '{"paths": ["/blog/post-1", "/blog/post-2"]}'- ตั้งค่า Revalidation ให้เหมาะกับจำนวนข้อมูล
- ใช้ GraphQL เมื่อต้องการข้อมูลเยอะๆ
- เปลี่ยนรหัส Revalidation Token บ่อยๆ
- ใช้ HTTPS เสมอ
- เพิ่ม meta tags ในหน้าเว็บ
- ใช้ sitemap แบบอัปเดตอัตโนมัติ
- เช็คว่า Token ถูกต้อง
- ตรวจสอบ URL ใน
Theme Settings - ดู log ข้อผิดพลาดในเซิร์ฟเวอร์
- ตรวจสอบว่าติดตั้งปลั๊กอินครบ
- ลองใช้ GraphiQL เพื่อทดสอบ