Routing in Wordpress

I am using this example to rewrite url to load a given file car-details.php but I stil get error Page not found when I access domain.com/account/account_page/9 How can I get this working.

class Your_Class
{

    public function init()
    {
        add_filter( 'template_include', array( $this, 'include_template' ) );
        add_filter( 'init', array( $this, 'rewrite_rules' ) );
    }

    public function include_template( $template )
    {
        //try and get the query var we registered in our query_vars() function
        $account_page = get_query_var( 'account_page' );

        //if the query var has data, we must be on the right page, load our custom template
        if ( $account_page ) {

            return CUSTOMER_CAR_PLUGIN_DIR.'pages/customer-car-details.php';
        }

        return $template;
    }

    public function flush_rules()
    {
        $this-rewrite_rules();

        flush_rewrite_rules();
    }

    public function rewrite_rules()
    {
        add_rewrite_rule( 'account/(.+?)/?$', 'index.php?account_page=$matches[1]', 'top');
        add_rewrite_tag( '%account_page%', '([^]+)' );
    }

}

add_action( 'plugins_loaded', array( new Your_Class, 'init' ) );

// One time activation functions
register_activation_hook( CUSTOMER_CAR_PLUGIN_DIR, array( new Your_Class, 'flush_rules' ) );
}

Topic url-rewriting Wordpress

Category Web


Instead of adding query_vars with add_rewrite_tag(), use the query_vars filter hook. I've used the following code to test your routing and it's working just fine.

class OP_Plugin {

    public function init() {
        add_action( 'init', array( $this, 'add_rewrite_rules' ) );
        add_filter( 'query_vars', array( $this, 'add_query_vars' ) );
        add_filter( 'template_include', array( $this, 'add_template' ) );
    }

    public function add_template( $template ) {
        $account_page = get_query_var( 'account_page' );
        if ( $account_page ) {
            echo "Working! \n";
            echo "Query: {$account_page}";
            // return CUSTOMER_CAR_PLUGIN_DIR.'pages/customer-car-details.php';
            return '';
        }
        return $template;
    }

    public function flush_rules() {
        $this->rewrite_rules();
        flush_rewrite_rules();
    }

    public function add_rewrite_rules() {
        add_rewrite_rule( 'account/(.+?)/?$', 'index.php?account_page=$matches[1]', 'top' );
    }

    public function add_query_vars( $vars ) {
        $vars[] = 'account_page';
        return $vars;
    }

}
$op_plugin = new OP_Plugin();
$op_plugin->init();

About

Geeks Mental is a community that publishes articles and tutorials about Web, Android, Data Science, new techniques and Linux security.