add_rewrite_rule
В тупик уткнулся. Нужен help.
Суть такова: леплю в свое, так сказать, неудовольствие WordPress-плагин. Задача вот в чем:
Нужно, чтобы по ссылкам вида : https://site.com/ru/page_name открывалась https://site.com/page_name без перенаправления
Параметр "[ru]" динамический. Это слаг непубличного кастомного типа поста "languages".
Вроде в плагинах мультиязычности это сплошь и рядом. Но, поковыряв один из них, так к пониманию и не пришел пока что. Подскажите, пожалуйста, как подобное реализовать.
Смотрел в сторону add_rewrite_rule.
Единственное, чего добился) - вместо 404 открывается index.php)). Это вообще не то, чего хотел добиться. Направьте заблудшую душу. Спасибо))
Обрывки говнокода)) :
static function set_current_region(){
$chanks = explode('/',$_SERVER['REQUEST_URI']);
if(!isset($chanks[1])){ self::$current_reg = self::get_default_reg(); self::$is_default = true; }else{
$reg_by = self::get_region_by('slug',$chanks[1]);
if($reg_by == false){ self::$current_reg = self::get_default_reg(); self::$is_default = true; }else{
self::$current_reg = $reg_by;
}
}
}
//Несуществуюущая функция, которая должна установить правила перенаправлений:
static function set_rewrite(){
//add_rewrite_tag( '%my_slug%', '('.self::$current_reg['slug'].')');
}
Ответы (1 шт):
Лазил по ядру WP чтоб узнать где он парсит входящий URL. Насколько я понял это класс WP. Там нашел такие строки:
$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : '';
list( $pathinfo ) = explode( '?', $pathinfo );
$pathinfo = str_replace( '%', '%25', $pathinfo );
list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
$self = $_SERVER['PHP_SELF'];
$home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' );
$home_path_regex = sprintf( '|^%s|i', preg_quote( $home_path, '|' ) );
Фильтров там не нашел. И пошел ва-банк:
add_action( 'init', array(PLUGIN_CLASS_NAME,'rewrite_request_uri'),11);
static function rewrite_request_uri(){
self::$old_request_uri = $_SERVER['REQUEST_URI'];
$_SERVER['REQUEST_URI'] = str_replace([self::$current_reg['subdomain'].'/',self::$current_reg['subdomain']],'',$_SERVER['REQUEST_URI']);
}
Старый REQUEST_URI сохранил чтоб на более поздний хук восстановить. Только багов это никаких не дало, как я ожидал)) потому нужда отпала.
PS: Это мне кажется крайне не красивым решением мягко говоря. По тому все еще жду ответов. Если они будут конечно... Спасибо.