Routing in Wordpress

时间:2018-02-18 作者:ovicko

我在用这个example 重写url以加载给定文件car-details.php 但我还是出错了Page not found 当我访问domain.com/account/account_page/9 我怎样才能让它工作。

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\' ) );
}

1 个回复
SO网友:obiPlabon

而不是添加query_vars 具有add_rewrite_tag(), 使用query_vars 过滤器挂钩。我使用了以下代码来测试您的路由,它工作得很好。

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();

结束

相关推荐