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 шт):

Автор решения: junior-web-dev

Лазил по ядру 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: Это мне кажется крайне не красивым решением мягко говоря. По тому все еще жду ответов. Если они будут конечно... Спасибо.

→ Ссылка