Рассмотрим как в WordPress можно загрузить отдельный файл шаблона при задании определенного GET-параметра.
Допустим, мы хотим создать страницу с информацией об аккаунте. При задании параметра account
должен загружаться, например, account.php вместо index.php.
Адрес (URL) будет выглядеть примерно так:
example.com?account=user_name
Довольно простое решение этой проблемы возможно путем добавления в functions.php темы следующего кода:
add_action( 'template_include', 'account_page_template' );
function account_page_template( $template ) {
if( isset( $_GET[ 'account' ] ) ) {
return locate_template( array( 'account.php' ) );
}
return $template;
}
Но поскольку кажется вполне естественным использовать какую-либо структуру постоянных ссылок для таких вещей в WordPress, то вот ниже часть окончательного кода, которая делает возможными структуры URL-адресов, такие как example.com/account/user_name:
// Register to query vars
add_filter( 'query_vars', 'add_query_vars');
function add_query_vars( $vars ) {
$vars[] = 'account';
return $vars;
}
// Add rewrite endpoint
add_action( 'init', 'account_page_endpoint' );
function account_page_endpoint() {
add_rewrite_endpoint( 'account', EP_ROOT );
}
// Load template
add_action( 'template_include', 'account_page_template' );
function account_page_template( $template ) {
if( get_query_var( 'account', false ) !== false ) {
return locate_template( array( 'account.php' ) );
}
return $template;
}
В шаблоне acccount.php вы можете получить значение параметра следующим образом:
$user_name = get_query_var( 'account', false );