Есть два способа сделать это:
- Страница автора с пользовательским правилом перезаписи
- Файлы пользовательских шаблонов в сочетании с правилом перезаписи
Первый способ более прост в реализации, но может работать не во всех обстоятельствах (один из которых я опишу в ближайшее время).
Пользовательское правило перезаписи
Я нашел это решение несколько дней назад здесь: перезапись 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;
}
Затем вы можете использовать встроенный шаблон author.php, модифицируя содержимое вашего сердца.
С уважением, проверьте ссылку, указанную выше, так как Ян Фабри отлично объясняет все.
Варианты запросов и шаблоны страниц
Для темы, над которой я работал, находя эти решения, мне нужно было обслуживать пользовательскую страницу, основанную на мета-значении пользователя (отдельном идентификаторе). Мой клиент не хотел, чтобы имя пользователя или идентификатор пользователя были видны публично, поэтому мы создали отдельный слой.
Единственная проблема? На данный момент нет четкого способа использования API Rewrite для запроса по мета-ключам / значениям. К счастью, было решение.
В вашем файле functions.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;
}
И затем вам нужно создать новый тег и правило перезаписи, чтобы он знал, когда и как обрабатывать новый запрос var.
add_rewrite_tag( '%user%', '([^&]+)' );
add_rewrite_rule(
'^user/([^/]*)/?',
'index.php?user=$matches[1]',
'top'
);
После того, как вы это сделали, вам просто нужно «поймать», когда обрабатывается запрос var, и затем перенаправить на выбранный вами шаблон:
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.
Вывод
Оба из них являются действующими, работающими решениями. Второй предлагает отдельный уровень «безопасности», так как он не раскрывает идентификаторы или имена пользователей, если другие люди смогут просматривать профили.
Надеюсь, это поможет, дайте мне знать, если у вас есть какие-либо вопросы.
Я нашел это ранее сегодня и сделал некоторые изменения в коде @bybloggers с той разницей, что вместо использования template_redirect я изменяю запрос на отображение статической страницы, это означает, что теперь вы можете добавлять все, что вам нравится, в шаблон страницы и использовать его на этом стр.
Испанский -> usuario = пользователь <- английский
источник
get_page_by_path('page-slug')->ID
. Также не забывайте об использованииflush_rewrite_rules
, поэтому я бы добавил, как:add_action( 'after_switch_theme', 'flush_rewrite_rules' );
Это мой рабочий код, основанный на ответе @bybloggers (спасибо, кстати). Я просто узнал, что мы не должны использовать ловушку template_redirect и затем выходить из php, потому что некоторые вещи могут перестать работать из-за внезапного прерывания выполнения кода php.
Объяснение здесь: https://markjaquith.wordpress.com/2014/02/19/template_redirect-is-not-for-loading-templates/
Итак, мы должны использовать хук template_include. С этим хуком нет необходимости использовать метод перенаправления и выхода.
И другое отличие состоит в том, что мне просто нужно было www.server.com/myaccount без / userid.
Это код:
источник
Другой способ заключается в использовании Buddypress, который имеет эту встроенную функцию, даже если плагин обладает еще большей функциональностью, которая может не представлять интереса.
http://wordpress.org/extend/plugins/buddypress/
источник