创建自定义帖子时自动创建子自定义帖子

时间:2015-10-21 作者:wpuser

我有一个名为“艺术家”的自定义帖子类型。每当我创建一个“艺术家”帖子时,我都会收到以下永久链接: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 标记获取指向子自定义帖子的链接。

有可能吗?实现这种自动化的最佳方式是什么?

1 个回复
最合适的回答,由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\'
);

相关推荐