我有一个名为“艺术家”的自定义帖子类型。每当我创建一个“艺术家”帖子时,我都会收到以下永久链接:www.myexample。com/艺术家/艺术家姓名
这是我唯一的艺术家。php代码:
<?php get_header(); ?>
<?php $query = new WP_Query( \'post_type=artist\' ); ?>
<?php while ( $query->have_posts() ) : $query->the_post(); ?>
<div class="artist-info">
<p>Artist name</p>
<a href="/hire-artist/artist-name">Hire artist</a>
<div>
<?php endwhile ?>
<?php wp_reset_postdata(); ?>
<?php get_footer(); ?>
这是注册自定义帖子的代码:
function codex_custom_init() {
register_post_type( \'artist\',
array(
\'public\' => true,
\'label\' => \'Artists\',
\'menu_position\' => 5,
\'supports\' => array( \'title\', \'editor\', \'excerpt\', \'custom-fields\', \'thumbnail\' ),
)
);
}
add_action( \'init\', \'codex_custom_init\' );
我想这样做,当一个“艺术家”的帖子被创建时,它的“子帖子”也会被使用这个永久链接创建:www.myexample。com/聘请艺术家/艺术家姓名
因此,这两篇帖子仍然是相关的,但都是不同的自定义帖子类型,因为我将为“雇佣艺术家”子帖子使用另一个模板。还有a
标记获取指向子自定义帖子的链接。
有可能吗?实现这种自动化的最佳方式是什么?
最合适的回答,由SO网友:Milo 整理而成
与其创建另一篇文章,似乎只是为了呈现不同的模板,我会add a rewrite endpoint 支持艺术家URL末尾的附加段。在这种情况下,您的URL将是:
www.example。com/艺术家/艺术家姓名/雇佣/
这样做的好处是,与艺术家相关的所有数据都可以保留在单个艺术家帖子中。在前端渲染这些贴子时,查询的对象包含艺术家数据,不需要连接多个贴子。
为此,我们首先添加端点:
function wpd_hire_endpoint(){
add_rewrite_endpoint( \'hire\', EP_PERMALINK );
}
add_action( \'init\', \'wpd_hire_endpoint\' );
请注意,如果您的帖子类型是分层的,则需要使用
EP_PAGES
端点掩码,而不是
EP_PERMALINK
.
接下来,将过滤器添加到single_template
要在访问这些URL时加载雇用模板,请执行以下操作:
function wpd_hire_template( $template = \'\' ) {
global $wp_query;
if( ! array_key_exists( \'hire\', $wp_query->query_vars ) ) return $template;
$template = locate_template( \'hire.php\' );
return $template;
}
add_filter( \'single_template\', \'wpd_hire_template\' );
请记住在添加端点后刷新重写规则。
编辑-添加其他重写规则以实现备用URL结构:
add_rewrite_rule(
\'hire-artist/([^/]+)/?$\',
\'index.php?artist=$matches[1]&hire=true\',
\'top\'
);