Có hai cách tôi đã khám phá ra điều này:
- Trang tác giả với quy tắc viết lại tùy chỉnh
- Một tệp mẫu tùy chỉnh được ghép nối với quy tắc viết lại
Cách đầu tiên đơn giản hơn để thực hiện, nhưng có thể không hoạt động trong mọi trường hợp (một trong số đó tôi sẽ mô tả sớm).
Quy tắc viết lại tùy chỉnh
Tôi đã tìm thấy giải pháp này vài ngày trước tại đây: Viết lại URL
Và đây là mã, với ý kiến:
// Define the author levels you want to use
$custom_author_levels = array( 'user', 'leader' );
// On init, add a new author_level rewrite tag and add it to the author_base property of wp_rewrite
add_action( 'init', 'wpleet_init' );
function wpleet_init()
{
global $wp_rewrite;
$author_levels = $GLOBALS['custom_author_levels'];
// Define the tag and use it in the rewrite rule
add_rewrite_tag( '%author_level%', '(' . implode( '|', $author_levels ) . ')' );
$wp_rewrite->author_base = '%author_level%';
}
// The previous function creates extra author_name rewrite rules that are unnecessary.
//This function tests for and removes them
add_filter( 'author_rewrite_rules', 'wpleet_author_rewrite_rules' );
function wpleet_author_rewrite_rules( $author_rewrite_rules )
{
foreach ( $author_rewrite_rules as $pattern => $substitution ) {
if ( FALSE === strpos( $substitution, 'author_name' ) ) {
unset( $author_rewrite_rules[$pattern] );
}
}
return $author_rewrite_rules;
}
Sau đó, bạn có thể sử dụng mẫu Author.php tích hợp, sửa đổi nội dung trái tim của bạn.
Trân trọng, kiểm tra liên kết được liệt kê ở trên, vì Jan Fabry thực hiện một công việc tuyệt vời để giải thích mọi thứ.
Vars truy vấn và mẫu trang
Đối với chủ đề tôi đang thực hiện khi khám phá các giải pháp này, tôi cần phân phát trang tùy chỉnh dựa trên giá trị meta của người dùng (ID riêng). Khách hàng của tôi không muốn tên người dùng hoặc ID người dùng hiển thị công khai, vì vậy chúng tôi đã tạo một lớp riêng.
Vấn đề duy nhất? Hiện tại, không có cách rõ ràng nào để sử dụng API Rewrite để truy vấn theo các khóa / giá trị meta. May mắn thay, đã có một giải pháp.
Trong tệp tin.php của bạn ...
// Create the query var so that WP catches your custom /user/username url
add_filter( 'query_vars', 'wpleet_rewrite_add_var' );
function wpleet_rewrite_add_var( $vars )
{
$vars[] = 'user';
return $vars;
}
Và sau đó, bạn cần tạo một thẻ viết lại và quy tắc mới để nó biết khi nào và làm thế nào để xử lý var truy vấn mới.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Khi bạn đã hoàn thành việc này, bạn chỉ cần "bắt" khi var truy vấn đang được phục vụ và sau đó chuyển hướng đến mẫu bạn chọn:
add_action( 'template_redirect', 'wpleet_rewrite_catch' );
function wpleet_rewrite_catch()
{
global $wp_query;
if ( array_key_exists( 'user', $wp_query->query_vars ) ) {
include (TEMPLATEPATH . '/user-profile.php');
exit;
}
}
Chỉ cần chắc chắn rằng bạn đã tạo user-profile.php.
Trong ví dụ của riêng tôi, tôi đã tạo một hàm thứ ba khớp với "ID người dùng công khai" với user_id thực tế thông qua bảng $ wpdb-> usermeta và chuyển thông tin đến mẫu.
Nếu bạn cần tạo một mẫu khác với phần còn lại của chủ đề, hãy nhớ rằng với get_header, bạn có thể chỉ định một tên:
get_header( 'user' );
Mà sẽ gọi tệp tiêu đề-user.php.
Phần kết luận
Cả hai đều là giải pháp làm việc hợp lệ. Thứ hai cung cấp một lớp "bảo mật" riêng vì nó không tiết lộ ID người dùng hoặc tên người dùng, nếu người khác có thể duyệt hồ sơ.
Hy vọng rằng sẽ giúp, cho tôi biết nếu bạn có bất kỳ câu hỏi.