Mục tiêu
- Tự động cập nhật slug mỗi khi bạn đăng mới hoặc cập nhật bài viết
- Đảm bảo đường dẫn luôn được đồng bộ với tiêu đề (tránh sai chính tả, link cũ…)
Cách thực hiện
Bạn chỉ cần dán đoạn mã sau vào functions.php của theme (hoặc theme con) bạn đang sử dụng:
/**
* Tự động cập nhật slug từ tiêu đề khi đăng bài viết mới (chương)
*/
function auto_update_slug($post_id, $post, $update) {
// Bỏ qua nếu là revision hoặc không phải post thường
if (wp_is_post_revision($post_id) || $post->post_type !== 'post') {
return;
}
// Lấy slug hiện tại và slug mới dự kiến từ tiêu đề
$current_slug = $post->post_name;
$new_slug = sanitize_title($post->post_title);
// Chỉ cập nhật nếu slug khác nhau
if ($current_slug !== $new_slug && !empty($new_slug)) {
// Gỡ tạm hook để tránh vòng lặp
remove_action('save_post', 'auto_update_slug', 10);
// Cập nhật slug
wp_update_post([
'ID' => $post_id,
'post_name' => $new_slug
]);
// Gắn lại hook sau khi cập nhật
add_action('save_post', 'auto_update_slug', 10, 3);
}
}
add_action('save_post', 'auto_update_slug', 10, 3);
Một số lưu ý
- Nếu bạn dùng custom post type như
chapter,newshoặcreview, hãy thay'post'bằng loại bài đăng tương ứng. - Slug sẽ luôn bị cập nhật lại theo tiêu đề mới — kể cả khi bạn chỉ chỉnh sửa nội dung.
- Nếu bạn muốn chỉ áp dụng khi đăng mới, bạn có thể thêm điều kiện
if ( !$update ).
Kết luận
Với đoạn mã trên, bạn không còn lo bài viết bị sai slug hay phải sửa tay. Đây là cách đơn giản và gọn gàng để đồng bộ hóa URL với tiêu đề, giúp tăng tính nhất quán và hỗ trợ SEO.
Chúc các bạn thành công!
Bình luận