我们可以在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); ?>