在Wordpress中添加自定义帖子类型的其他页面

时间:2015-07-15 15:21:38

标签: php wordpress custom-post-type

我创建了一个名为" Courses"。

的自定义帖子类型

Wordpress会自动为"课程":

添加以下网址

但是我希望再添加一些页面:

问题是我不确定"正确"如何添加这些页面的方式。我现在这样做的方式是这样的:

function create_post_types() {
    // ...add custom post types ...

    add_rewrite_rule("course/([^/]+)/enquiry/?$",
        'index.php?post_type=course&course=$matches[1]&enquiry=true', 'top');

    add_rewrite_rule("course/([^/]+)/demo/?$",
        'index.php?post_type=course&course=$matches[1]&demo=true', 'top');
}
add_action( 'init', 'create_post_types' );

function add_query_vars_filter( $vars ){
    $vars[] = "enquiry";
    $vars[] = "demo";
    return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );

然后在" single-course.php"我添加了以下if语句:

if (get_query_var('enquiry')) {
    // enquiry page code
} else if (get_query_var('demo')) {
    // Demo Page code
} else {
    // Single course page code
}

然而,我这样做的方式感觉更像是一个黑客,并且感觉不像是正确的Wordpress方式。因此,它不适用于其他插件,例如" Yoast SEO Plugin"它无法识别我的附加页面的XML站点地图。我假设在面包屑方面会出现类似的问题。

为自定义帖子类型添加其他页面的最佳做法或更好的方法是什么?

可选问题:此外,实施演示页面的方式也是合适的(因为这需要通过get_field('online_course') == True检查课程是否满足某个条件。

1 个答案:

答案 0 :(得分:1)

声明自定义帖子类型

你的functions.php中的

$labelsCourse = array(
        'name' => 'Course',
        'singular_name' => 'Course',
        'add_new' => 'Add New',
        'add_new_item' => 'Add New Course',
        'edit_item' => 'Edit Course',
        'new_item' => 'New Course',
        'view_item' => 'View Course',
        'search_items' => 'Search Courses',
        'not_found' => 'No courses found.',
        'not_found_in_trash' => 'No courses found in Trash.'
    );
register_post_type('course', array(
    'labels' => $labelsCourse,
    'public' => true,
    'publicly_queryable'    => true,
    'has_archive' => 'course',
    'show_ui' => true,
    'capability_type' => 'page',
    'hierarchical' => true,
    'rewrite' => array( 'slug' => 'course', 'with_front' => false ),
    'query_var' => true,
    'supports' => array('title', 'thumbnail', 'editor', 'page-attributes')
));

然后在您的管理员中添加一个名为“”course-name“的新课程,然后添加另一个名为”“demo”的新课程。

然后在您的single-course.php中,您可以添加一个条件语句来调用子页面。