自定义邮件类型的自定义路线?

时间:2019-12-05 作者:gloom

我有一个名为“事件”的自定义帖子类型。活动有多个子页面,如注册、发言人、联系我们等。当前内容保存为一个或多个自定义字段。

我想有一个url结构,如

  • events/{event_slug}/registration
  • events/{event_slug}/speakers
  • events/{event_slug}/contactus

    我们有没有办法在WordPress中实现这一点?

2 个回复
SO网友:Serkan Algur

您可能需要使用此resource. 您可以创建自己的帖子类型链接(可能还有关系模板结构)

他们说你可以创造domain.com/{prefix}/{post-type-slug}/{postname} 喜欢URL及其代码(甚至可以创建自定义URL)。

SO网友:nmr

一种方法是输入一个额外的查询变量,然后重写规则进行设置。元字段将基于此新查询变量显示。

add_filter( \'query_vars\', \'se353995_query_vars\' );
add_action( \'init\', \'se353995_sublinks\', 20 );

function se353995_query_vars( $vars )
{
    $vars[] = "subpage";
    return $vars;
}
function se353995_sublinks()
{
    $cpt_slug = \'events\';
    $sublinks = \'(registration|speakers|contactus)\';

    add_rewrite_rule(
        "$cpt_slug/([^/]+)(?:/$sublinks)/?$",
        \'index.php?\'.$cpt_slug.\'=$matches[1]&post_type=\'.$cpt_slug.\'&subpage=$matches[2]\',
        \'top\'
    );
}
如何显示页面的示例,single-events.php:

while ( have_posts() ) :
    the_post();

    // check what event subpage to display
    $qv = get_query_var( \'subpage\', false );
    if ( $qv == \'registration\' )
    {
        // display "registration" subpage
        //
        $customfield_reg = get_post_meta(get_the_ID(), \'meta_field_name\', true) );
    }
    else if ( $qv == \'speakers\' )
    {
        // display "child page" 
        //
        $customfield_reg = get_post_meta(get_the_ID(), \'other_field_name\', true) ;
    }
    else
    {
        // default one
        //
        get_template_part( \'content\', \'single\' );
    }

endwhile; // End of the loop.

相关推荐

Debugging WP routing

对于一些帖子,我看到404页,即使存在帖子,在WP中使用永久链接决定需要呈现什么对象的位置在哪里?谢谢