WordPress เป็นระบบจัดการเนื้อหาที่ได้รับความนิยมอย่างมาก แต่บางครั้งคุณอาจต้องการปรับแต่งโครงสร้าง URL ของโพสต์ให้สอดคล้องกับความต้องการเฉพาะของเว็บไซต์ หนึ่งในเคสที่พบบ่อยคือการเพิ่ม slug “blog” ก่อนหน้าชื่อโพสต์ ซึ่งสามารถทำให้เว็บไซต์ดูเป็นระเบียบมากยิ่งขึ้น
การเพิ่ม slug “blog” นั้นจะช่วยให้แยกประเภทโพสต์บล็อกจากเนื้อหาอื่น ๆ ในเว็บไซต์ได้อย่างชัดเจน เช่น หากมีโครงสร้าง URL แบบ example.com/blog/post-slug จะทำให้ผู้ใช้งานทราบได้ทันทีว่าเนื้อหานี้คือบทความนอกจากนี้ยังส่งผลดีต่อ SEO อีกด้วย
ในบทความนี้ เราจะสอนวิธีการเพิ่ม slug “blog” ก่อนหน้า URL ของโพสต์ใน WordPress รวมถึงวิธีการจัดการกับ Rewrite rules, Permalink, และ Redirect เพื่อให้ URL ของคุณทำงานได้อย่างถูกต้อง
ขั้นตอนการเพิ่ม Slug “blog”
1. สร้าง Rewrite Rule สำหรับ Slug “blog”
การเพิ่ม slug ในโครงสร้าง URL ต้องเริ่มจากการเขียน Rewrite Rule เพื่อบอกให้ WordPress รู้ว่าเมื่อใดควรจับคู่กับโครงสร้าง URL ที่มี “/blog/”
add_action( 'init', static function (): void {
add_rewrite_rule( '^blog/([^/]+)/?$', 'index.php?name=$matches[1]', 'top' );
} );
โค้ดนี้จะเพิ่มกฎที่ WordPress ใช้สำหรับจับคู่กับ URL ที่มี “/blog/” อยู่ก่อนหน้าชื่อโพสต์ ซึ่งจะช่วยให้ WordPress สามารถแสดงโพสต์ที่มีโครงสร้าง URL ดังกล่าวได้อย่างถูกต้อง
Tip: หลังจากเพิ่มกฎ Rewrite แล้วอย่าลืมไปที่ Settings > Permalinks แล้วกด “Save Changes” เพื่อรีเฟรช Rewrite rules ด้วย
2. ปรับแต่ง Permalink ของโพสต์
ขั้นตอนต่อมาคือการแก้ไข Permalink ของโพสต์เพื่อให้มี slug “blog” เพิ่มเข้ามา เราจะใช้ Filter post_type_link ในการจัดการ Permalink สำหรับ Post Type ที่เป็น post เท่านั้น
add_filter( 'post_type_link', static function ( string $post_link, WP_Post $post ): string {
if ( $post->post_type === 'post' ) {
return home_url( '/blog/' . $post->post_name . '/' );
}
return $post_link;
}, 10, 2 );
โค้ดนี้จะทำให้ทุกโพสต์ที่เป็น post type post มี slug “blog” เพิ่มเข้ามาใน URL เช่น example.com/blog/post-slug/
3. แก้ไข Permalink ใน get_post_permalink()
ถ้าคุณใช้ Function get_post_permalink() หรือ Function ที่เกี่ยวข้อง คุณจะต้องใช้ Filter post_link เพื่อให้โครงสร้างของ URL ทำงานได้อย่างถูกต้อง
add_filter( 'post_link', static function ( string $permalink, WP_Post $post ): string {
if ( $post->post_type === 'post' ) {
return home_url( '/blog/' . $post->post_name . '/' );
}
return $permalink;
}, 10, 2 );
Filter นี้จะทำให้การเรียก Permalink โดยใช้ Function get_permalink() หรือ get_post_permalink() ในการแสดง URL ที่มี “blog”
4. ตรวจสอบ URL ในการ Redirect URL
เพื่อให้แน่ใจว่าผู้ใช้ทุกคนเข้าถึง URL อย่างถูกต้อง เราจำเป็นจะต้องทำการ Redirect URL หากมีผู้ใช้ที่พยายามเข้าถึงโพสต์โดยไม่มี slug “blog” โค้ดด้านล่างนี้จะช่วยทำการ Redirect ไปยัง URL ได้ถูกต้อง
add_action( 'template_redirect', static function (): void {
if ( is_singular( 'post' ) ) {
global $post;
$current_url = home_url( untrailingslashit( add_query_arg( null, null ) ) );
$correct_url = untrailingslashit( get_permalink( $post ) );
if ( $current_url !== $correct_url ) {
wp_redirect( $correct_url, 301 );
exit;
}
}
} );
Function นี้จะตรวจสอบว่า URL ที่เข้าถึงถูกต้องหรือไม่ หากไม่ถูกต้อง มันจะทำการ Redirect ไปยัง URL ที่มี slug “blog” โดยการ Redirect แบบ 301 เพื่อรักษา SEO ของคุณเอาไว้นั้นเอง
ข้อดีของการใช้ Slug “blog”
- SEO ที่ดีขึ้น การใช้ slug ที่ชัดเจนอย่าง blog ช่วยให้ Google เข้าใจว่าเนื้อหาเป็นบทความบล็อก ซึ่งมีผลดีต่อการจัดอันดับ
- โครงสร้าง URL ที่ชัดเจน ผู้ใช้สามารถรู้ได้ทันทีว่าเนื้อหานี้คือบล็อก ไม่ใช่เนื้อหาอื่น ๆ เช่น หน้าหลักหรือเพจ
- ง่ายต่อการจัดการเนื้อหา หากเว็บไซต์ของคุณมีหลายประเภทเนื้อหา การเพิ่ม slug ที่แยกประเภทจะช่วยให้คุณจัดการและจัดหมวดหมู่เนื้อหาได้ง่ายขึ้น
สรุป
การเพิ่ม slug “blog” URL ของโพสต์ใน WordPress เป็นวิธีที่ดีในการปรับแต่งโครงสร้างของ URL ให้ชัดเจนและมีประโยชน์ต่อการใช้งานและ SEO ด้วยวิธีการที่กล่าวมาในบทความนี้ คุณสามารถตั้งค่า Rewrite Rules และ Permalink ได้ง่ายๆ
โค้ดทั้งหมด: https://gist.github.com/aphagon/6238c9089ae04e5cf81b45c25b0c4405