Возможно криво, но смог решить, помогла статья
Необходимо переназначить Rewrite:
add_filter( 'rewrite_rules_array','my_insert_rewrite_rules' );
add_filter( 'query_vars','my_insert_query_vars' );
add_action( 'wp_loaded','my_flush_rules' );
// Сбиваем правила flush_rules(), если наших еще нет в списке (операция ресурсоемкая, поэтому не стоит ее делать каждый раз)
function my_flush_rules(){
$rules = get_option( 'rewrite_rules' );
// достаточно проверить, есть ли в списке хотя бы одно из наших правил
if ( ! isset( $rules['biography/([^/]*)/?$'] ) ) {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
}
// Добавляем наши правила
function my_insert_rewrite_rules( $rules )
{
$newrules = array();
$newrules['biography/([^/]*)/?$'] = 'index.php?pagename=biography';
return $newrules + $rules; // так оно добавляет наши правила к уже существующим, а еще мы можем тупо убрать все и вернуть только свой список, сделав return $newrules;
}
// Добавляем переменную id, чтобы WP воспринимал ее
function my_insert_query_vars( $vars )
{
array_push($vars, 'id');
return $vars;
}
Теперь будут открываться страницы типа site.ru/biography/a/
Далее необходимо в коде обрабатывать полученную ЧПУ (я так сделал, ибо не понял как ещё можно параметры передать), в этом мне помогла статья:
P.S.: Я совсем не программист и досконально не разбирался, по-этому в коде может быть лишнее.