我也做过类似的事情,下面是我如何处理的。
首先,我没有使用子页面,而是将所有数据放在一个页面上,并将可能的“子”存储为posmeta。我的自定义帖子类型编辑页面中有7或8个编辑器。这使得WordPress管理更干净,编辑我的帖子也更容易,因为我没有在一个地方开始帖子,然后必须再创建7个页面并进行编辑。我不会包含该代码,因为它涵盖得很好elsewhere.
我通过重写标签导航页面。以下是我的功能。php文件(针对您的数据修改的所有示例代码):
add_action(\'init\', \'wpse_74829_rewrite_additions\');
function wpse_74829_rewrite_additions() {
add_rewrite_tag( \'%section%\', \'(gallery|features|accessories)\' );
add_rewrite_rule(\'^([^/]+)/(gallery|features|accessories)/?\', \'index.php?car=$matches[1]§ion=$matches[2]\', \'top\');
}
接下来,我有了一个助手来根据节显示内容。
<?php
function wpse_74829_the_section( $section ) {
$content = get_post_meta( get_the_ID(), $section, true );
if ( $content ) {
$content = str_replace( \']]>\', \']]>\', $content );
echo apply_filters( \'the_content\', $content );
}
}
?>
以下是我的循环内部的内容:
<div class="entry-content">
<?php
switch ( $wp_query->query_vars[\'section\'] ) {
case \'gallery\':
wpse_74829_the_section( \'gallery\' );
break;
case \'features\':
wpse_74829_the_section( \'features\' );
break;
case \'accessories\':
wpse_74829_the_section( \'accessories\' );
break;
default:
the_content();
break;
}
?>
</div>
最后,我的链接有一个助手:
function wpse_74829_the_section_url( $section ) {
$url = get_permalink();
if ( strpos( $url, \'?\') ) echo add_query_arg( \'section\', $section );
else echo $url . $section . \'/\';
}
然后我可以链接到页面中的各个部分,比如,
<?php wpse_74829_the_section_url( \'gallery\' ); ?>