Я виявив це два способи:
- Авторська сторінка із користувацьким правилом перезапису
- Спеціальні файли шаблонів, сполучені з правилом перезапису
Перший простіший у виконанні, але може не працювати за будь-яких обставин (один з яких я розповім незабаром).
Спеціальне правило перезапису
Я знайшов це рішення кілька днів тому тут: Переписування URL
І ось код, із коментарями:
// 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;
}
Потім ви можете використовувати вбудований в авторський шаблон шаблон, змінюючи вміст ваших сердець.
З повагою, перегляньте посилання, перелічене вище, оскільки Ян Фабрі чудово роз'яснює все.
Варіанти запитів і шаблони сторінок
Для теми, над якою я працював під час пошуку цих рішень, мені потрібно було обслуговувати користувацьку сторінку на основі мета-значення користувача (окремий ідентифікатор). Мій клієнт не хотів, щоб ім’я користувача або ідентифікатор користувача були видимі загальнодоступними, тому ми створили окремий шар.
Єдина проблема? На даний момент не існує чіткого способу використання API переписати для запиту за мета-ключами / значеннями. На щастя, було рішення.
У вашому файлі function.php ...
// 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;
}
А потім вам потрібно створити новий тег перезапису та правити так, щоб він знав, коли та як обробити нову вару запиту.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
Після цього вам просто потрібно "зловити", коли подається вар-запит, а потім перенаправити на обраний шаблон:
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;
}
}
Просто переконайтеся, що ви створили user-profile.php.
У своєму власному прикладі я створив третю функцію, яка відповідала "загальнодоступному ідентифікатору користувача" фактичному user_id за допомогою таблиці $ wpdb-> usermeta і передала інформацію в шаблон.
Якщо вам потрібно створити шаблон, відмінний від решти вашої теми, пам’ятайте, що за допомогою get_header ви можете вказати ім’я:
get_header( 'user' );
Який буде викликати файл header-user.php.
Висновок
І те й інше є дійсними, робочими рішеннями. Другий пропонує окремий рівень "безпеки", оскільки він не розкриває ідентифікатори користувачів чи імена користувачів, якщо інші люди зможуть переглядати профілі.
Сподіваюся, що це допоможе, повідомте мені, якщо у вас є якісь питання.