Загрузка пользовательского шаблона для определенного GET параметра в Wordpress

Статьи 25.06.2022 (обновлено)

Рассмотрим как в 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 );

Сергей Ермилов
Опубликовано 09.06.2022
Категория: Статьи
Теги:

Добавить комментарий

Ваш адрес email не будет опубликован.