通过在创建CPT时设置重写,可以为用户提供一个实际的页面进行编辑,并提供所需的永久链接。
注意:您需要用实际的CPT slug替换“mycpt”的所有实例。
<?php
function wpse_360965_register_cpt() {
// First unregister this post type so we\'re starting from scratch
unregister_post_type( \'mycpt\' );
$args = array(
// Set the CPT to not have an actual Archive
\'has_archive\' => false,
// Set a Rewrite so permalinks still fall under the URL you desire
\'rewrite\' => array( \'slug\' => \'mycpt\' ),
// Add your other arguments here too
);
register_post_type( \'mycpt\' , $args );
}
add_action( \'init\' , \'wpse_360965_register_cpt\' );
?>
这样做的目的是确保WP不会创建实际的归档文件,从而可以创建页面。重写可以确保各个CPT的发布方式看起来像是该页面的“子级”,即使它们不是。
运行一次后,可以删除unregister_post_type()
线
从这里,您将创建page-mycpt.php
(再次更换slug)模板。您的需要将决定您是需要自定义循环,还是只需要编辑器提供的常规内容。
最后,面包屑将取决于您使用什么来生成面包屑。如果您使用的是Yoast WP SEO,那么您可能需要使用过滤器来使面包屑看起来正确。例如:
<?php
function wpse_360965_filter_yoast_breadcrumbs( $links ) {
// Only affect individual "mycpt" CPTs
if ( is_singular( \'mycpt\' ) ) {
// Add "My CPT" breadcrumb
$addedBreadcrumbs = array(
array( \'text\' => \'My CPT\', \'url\' => \'/mycpt/\', \'allow_html\' => 1)
);
// Add the new breadcrumb before the single CPT title
array_splice( $links, 1, 0, $addedBreadcrumbs );
}
// Always return the links, even if we didn\'t change them
return $links;
}
add_filter( \'wpseo_breadcrumb_links\', \'wpse_360965_filter_yoast_breadcrumbs\' );
?>
(再次,根据需要替换“My CPT”文本和“/mycpt/”URL。)