Спасибо, Юрий. Otto в теме 3 года назад всё понятно расписал. Сегодня ночью попробую и отпишусь — работает ли ещё это решение.
Итого. Так, как раньше работало, судя по некоторым официальным мануалам, больше не работает.
Я много вариантов сегодня перековырял, но в итоге подошёл один из официального гайда: http://codex.wordpress.org/Class_Reference/WP_Rewrite
Проверял на WP 341 без BuddyPress и ещё буду проверять на BP 156.
С гайдами всякое бывает, сделаю копипаст сюда.
A Quick and dirty example for rewriting http://mysite/project/1 into http://mysite/index.php?pagename=project&id=1:
// Jishi: in plugin or in functions.php
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() if our rules are not yet included
function my_flush_rules(){
$rules = get_option( 'rewrite_rules' );
if ( ! isset( $rules['(project)/(\d*)$'] ) ) {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
}
// Adding a new rule
function my_insert_rewrite_rules( $rules )
{
$newrules = array();
$newrules['(project)/(\d*)$'] = 'index.php?pagename=$matches[1]&id=$matches[2]';
return $newrules + $rules;
}
// Adding the id var so that WP recognizes it
function my_insert_query_vars( $vars )
{
array_push($vars, 'id');
return $vars;
}
// Jishi: in the page template
echo "My query var is ID: ".$wp_query->query_vars['id'];
Проверил на BP 156 — работает.
Модератор
Юрій
(@yube)
больше не работает.
Для эксперимента кусок кода «имени Otto» перенес с 3.3.1 на 3.4.1 — работает.
У меня не заработал.
Значит, теперь есть два подхода, один из которых точно сработает 🙂
Спасибо за помощь!