Wordpress Custom Url Routing

2019-08-12 01:59发布

I have a requirement that all urls have a variable at the end and all resolve to the same controller/view

so for example we have the following URL's:

http://example.com/users/joe
http://example.com/users/sam
http://example.com/users/jack

All three URLS should resolve to the same controller, where I would apply some logic to render each page differently based on the username.

How can I achieve this type of routing on Wordpress?

1条回答
2楼-- · 2019-08-12 02:35

you can use a rewrite for this...link to your controller file in the last function and call the view from there.

dont forget to visit the permalinks page and save (this flushes the rewrite rules).

    add_action('init', 'anew_rewrite_rule');
    function anew_rewrite_rule(){
       add_rewrite_rule('^users\\/[a-z]','index.php?is_customusers_page=1','top');  
    }

    add_action('query_vars','controller_set_query_var');
    function controller_set_query_var($vars) {
        array_push($vars, 'is_customusers_page'); // ref url redirected to in add rewrite rule

        return $vars;
    }


    //we'll call it a template but point to your controller
    add_filter('template_include', 'include_controller');
    function include_controller($template){


        // see above 2 functions..
        if(get_query_var('is_customusers_page')){
            //path to your template file
            $new_template = get_stylesheet_directory().'/controllerpath.php';
            if(file_exists($new_template)){
                $template = $new_template;
            } 
        }    

        return $template;    

    }
查看更多
登录 后发表回答