Cho phép trùng slug bài viết ở wordpress
31/01/2024 900
Bạn đang khổ sở tìm cách sử lý dạng link trùng nhau nhưng khác nhau kiểu ví dụ: ha-noi/nguyen-lan , da-nang/nguyen-lan, ho-chi-minh/nguyen-lan. Như vậy nguyen-lan nằm ở ha-noi, da-nang, ho-chi-minh. Nếu bạn tạo link như vậy thì thường sẽ báo lỗi 404 ở 2 link con lại. Vì thế đoạn code thần thánh này sẽ giúp bạn cho phép trùng slug
add_filter('wp_unique_post_slug', 'cho_phep_slug_trung', 10, 6);
function cho_phep_slug_trung($slug, $post_id, $post_status, $post_type, $post_parent, $original_slug) {
global $wpdb, $wp_rewrite;
$loai_bai_viet = get_post_type_object($post_type);
if (!$loai_bai_viet->hierarchical)
return $slug;
if (!preg_match('|[0-9]$|', $slug))
return $slug;
$feeds = $wp_rewrite->feeds;
if (!is_array($feeds))
$feeds = array();
$kiem_tra_sql = "
SELECT post_name
FROM $wpdb->posts
WHERE post_name = %s
AND post_type = %s
AND ID != %d
AND post_parent = %d
LIMIT 1";
$kiem_tra_ten_bai_viet = $wpdb->get_var($wpdb->prepare($kiem_tra_sql, $original_slug, $post_type, $post_id, $post_parent));
if ($kiem_tra_ten_bai_viet || in_array($original_slug, $feeds) || preg_match("@^($wp_rewrite->pagination_base)?\d+$@", $original_slug) || apply_filters('wp_unique_post_slug_is_bad_hierarchical_slug', false, $original_slug, $post_type, $post_parent)) {
$hau_to = 2;
do {
$slug_phu = substr($original_slug, 0, 200 - (strlen($hau_to) + 1)) . "-$hau_to";
$kiem_tra_ten_bai_viet = $wpdb->get_var($wpdb->prepare($kiem_tra_sql, $slug_phu, $post_type, $post_id, $post_parent));
$hau_to++;
} while ($kiem_tra_ten_bai_viet);
$slug = $slug_phu;
} else {
$slug = $original_slug;
}
return $slug;
}