главная/Создаем кастомную ссылку в WordPress при помощи rewrite rule
WP Custom url with rewrite rule

Создаем кастомную ссылку в WordPress при помощи rewrite rule

Привет, допустим тебе нужно создать кастомную страницу для WordPress на фронте. Например это будет некая ограниченная админка для юзеров. Соответственно тебе нужен уникальный URL, а еще лучше многоуровневый.

Например: /users/dashboard/

Первая часть ссылки это будет наша база. Она не меняется. Вторая часть url может быть что угодно, statistics или dashboard, не важно. Все зависит от того куда хочет попасть наш пользователь. Если это страница статистики или главная админки (если таковые имеются). Третья часть это $_GET атрибуты к примеру user_id (&user_id=$matches[3]) и т.д. В нашем случае оставим user_id.

Делать мы это будем при помощи функции add_rewrite_rule

add_rewrite_rule( '^(users)/([^/]*)/?', 'index.php?page_name=$matches[1]&page_type=$matches[2]&user_id=$matches[3]', 'top' );

Не забываем добавить все это в query_vars при помощи фильтра.

function prefix_register_query_var( $vars ) {
    $vars[] = 'page_type';
    $vars[] = 'user_id';
    $vars[] = 'page_name';
	
    return $vars;
}
add_filter( 'query_vars', 'prefix_register_query_var' );

Теперь нам надо определить, что мы находимся по адресу /users и посмотреть какой тип страницы. Ну и подгрузить какой либо template. Хукаемся на template_redirect и получаем наши переменные из query с помощью get_query_var.

function prefix_url_rewrite_templates() {
    if ( get_query_var( 'page_type' ) ) {
        echo '<pre>';var_dump(get_query_var( 'page_type' ));echo '</pre>';
	echo '<pre>';var_dump(get_query_var( 'page_name' ));echo '</pre>';
	echo '<pre>';var_dump(get_query_var( 'user_id' ));echo '</pre>';
    }
}
add_action( 'template_redirect', 'prefix_url_rewrite_templates' );

После чего в зависимости от page_type ( page_type === ‘dashboard’ или page_type === ‘statistics’) можем подключить темплейт через фильтр template_include

Весь код для примера: