我想创建一个自定义帖子类型并根据 URL 结构使用不同的模板显示它。具体来说,我想根据URL中的模板来显示不同的页面,例如:
我有三个不同的模板,想根据URL中的template_name显示对应的模板。公司名称将动态更改以加载相关公司数据,但我不想为每个模板创建三个单独的帖子。
我尝试使用分类类别来实现此目的,但它没有按预期工作。有没有办法处理这个问题,而无需为每个模板创建三个不同的帖子?
是的,可以使用重写规则(已测试):
// Register rewrite tag and rule for `company` post type.
add_action( 'init', static function () {
add_rewrite_tag( '%company_template%', '([^&]+)', 'company_template=' );
add_rewrite_rule( '^company/([^/]+)/([^/]+)(?:/([0-9]+))?/?$', 'index.php?company=$matches[2]&company_template=$matches[1]', 'top' );
} );
// Add the rewrite tag to accepted public query vars.
add_filter( 'query_vars', static function ( $vars ) {
$vars[] = 'company_template';
return $vars;
} );
// Change the template based on the query var.
add_filter( 'template_include', static function ( $template ) {
if ( ! is_string( get_query_var( 'company_template', false ) ) ) {
return $template;
}
// Change the template to use.
return $template;
} );
这也保留了原始的永久链接结构 (
/company/company-name/
)。