我真的想不出一种方法,你可以有一个帖子类型的页面,并让它是“可重复的”正如杰克所说,这将涉及重写规则。我认为最简单的方法是为主题目录中的任何情况设置一些模板,并使用查询变量来填充它们。例如:
function wpse_add_query_vars( $vars ){
$vars[] = "tmpl";
$vars[] = "author_slug";
return $vars;
}
add_filter( \'query_vars\', \'wpse_add_query_vars\' );
function wpse_add_rewrite_rule() {
add_rewrite_rule( \'^authors/([^/]*)/([^/]*)\', \'index.php?author_slug=$matches[1]&tmpl=$matches[2]\', \'top\' );
}
add_action( \'init\', \'wpse_add_rewrite_rule\' );
function wpse_template_include( $template ) {
if ( get_query_var( \'tmpl\' ) && get_query_var( \'author_slug\' ) ) {
if ( file_exists( get_template_directory() . \'/\' . get_query_var( \'tmpl\' ) . \'.php\' ) ) {
$template = get_template_directory() . \'/\' . get_query_var( \'tmpl\' ) . \'.php\';
}
}
return $template;
}
add_filter( \'template_include\', \'wpse_template_include\' );
我对此进行了测试,效果不错,但可能需要根据您的需要进行调整。基本上,情况如下:
我们注册了tmpl
查询var,以便指定模板文件slug作为名称。我们必须在主题文件夹中创建所需的模板我们将添加重写规则,以便在/authors/author-name/template-name
然后我们可以加载模板(如果存在)确保在添加或更改任何重写规则后刷新设置中的永久链接现在我们开始template_include
看看我们是否有tmpl
var集,检查主题目录中是否有模板,如果有,则返回该模板。例如,我们/authors/author-name/thank-you
, 我们将寻找thank-you.php
模板文件,并加载该文件,而不是默认模板。您可以使用get_query_var()
.这只是一个抽象的示例,显然需要根据您的需要进行调整,但使用此方法,您可以根据需要制作尽可能多的这些页面,并从主题开始进行维护。我也没有创建一个author-CPT来全面测试这一点,因此您可能需要调整重写规则,以便它不会与您试图使用author-CPT进行的其他操作发生冲突(事实上,您甚至可能不需要使用author\\u slug query var,因为它可能已经从WP中提供)。
以下是更多资源:
- Custom Page Template Page Based on URL Rewrite
- The Rewrite API: Post Types & Taxonomies当然,剥猫皮的方法不止一种,但希望这能帮助你找到正确的方向,或者至少给你一些可能的想法。