如何在wordrpess中创建虚拟页面? (创建没有数据库条目的页面)

时间:2019-06-11 09:32:58

标签: php wordpress

我们可以在WordPress中创建虚拟页面。也就是说,可以通过对函数中特定页面的重写规则来在WordPress中创建没有数据库条目的页面。

我只想创建一个页面名称“州”,其子页面约为705页。由于要创建大量页面,因此无法通过仪表板手动创建每个页面。它将增加数据库的条目和大小。

因此,我通过在我的functions.php中添加以下代码来使用虚拟页面概念

//1. Create a redirect for state and its sub pages
    add_action('init', 'state_page_rewrite_rules');
    function state_page_rewrite_rules(){
        add_rewrite_rule('^state/([A-Za-z0-9\-\_\s]+)/?$','index.php?sta_name=$matches[1]','top');
        //add_rewrite_rule('^state/(\w+)/?$','index.php?sta_name=$matches[1]&st_name=$matches[2]&cname=$matches[3]','top')
        add_rewrite_rule('^state/([A-Za-z0-9\-\_\s]+)/([A-Za-z0-9\-\_\s]+)/?$','index.php?st_name=$matches[1]&cname=$matches[2]','top');

        //flush the rewrite rules, should be in a plugin activation hook, i.e only run once...

        flush_rewrite_rules();  
    }

然后我想将一些参数动态传递给所有子页面。我通过添加以下代码获得了这些

add_action('query_vars','plugin_set_query_var');
    function plugin_set_query_var($vars) {
        array_push($vars, 'sta_name');
        array_push($vars, 'st_name'); // ref url redirected to in add rewrite rule
        array_push($vars, 'cname');
        return $vars;
    }

然后显示所有页面的结果,我创建了2页,一个用于状态页,另一个用于子页。我通过在functions.php中使用以下代码来做到这一点

add_filter('template_include', 'plugin_include_template');
    function plugin_include_template($template){

        // echo get_query_var('sta_name');

        // see above 2 functions..
        if((get_query_var('st_name')) && (get_query_var('cname'))){
            //path to your template file
            // echo get_query_var('st_name');
            // echo get_query_var('cname');
            $new_template = get_template_directory() . '/page-templates/virtual_template_city_details.php';
            if(file_exists($new_template)){
                $template = $new_template;
            } 
            // else needed? up to you maybe 404?
        }   

        if((get_query_var('sta_name'))){
            //path to your template file
            // echo get_query_var('sta_name');
            // echo get_query_var('cname');
            $new_template = get_template_directory() . '/page-templates/virtual_template_state_details.php';
            if(file_exists($new_template)){
                $template = $new_template;
            } 
            // else needed? up to you maybe 404?
        }

        return $template;    

    }

然后我通过使用动态获得参数 <?php get_query_var(var_name); ?>

0 个答案:

没有答案