自定义 post 类型 link 层次结构

custom post types link hierarchy

我必须独立自定义 post 类型:

  1. 课程
  2. 课程

所以一门课程可以有很多课,一课可以用于多门课程。这是一个 m:n 关系。

现在,如果从特定课程查看,我的内容应该只在课程页面上可见。

其实link结构是这样的:

  1. 转到课程:示例。org/my-first-course
  2. 我看到了与这门课程相关的所有课程
  3. 单击课程。 Link 结构是:example.org/great-lesson

现阶段我的问题是,我不知道我调用的是哪门课程。

我能做的一件事是将课程 ID 作为获取参数附加到 link: 例子.org/great-lesson/?course_id=123

但我想要一个更像这样的 link 结构: 范例.org/my-first-course/大课

我该怎么做?

.:: 更新:解决方案 ::.

这是我的解决方案,也许它会对某人有所帮助。

如果您使用 "add_rewrite_rule",请不要忘记为您的自定义 post 类型和查询变量 (cpt) 更改 slug (slug-custom-post-type) -query-var) 的。

我尝试使用 index.php?name=$matches[1],但它会重定向到自定义 post 类型,并且 URL 中的所有其他信息都将丢失。因此,使用自定义 post 类型查询变量很重要。

要访问 'course',您必须使用 get_query_var 函数: echo get_query_var('course', '');

function my_rewrite_rules() {
  add_rewrite_rule( '^slug-custom-post-type/([^/]*)/?', 'index.php?cpt-query-var=$matches[1]&course=$matches[2]', 'top' );
}

add_action('init', 'my_rewrite_rules');

function my_query_vars($qvars) {
  $qvars[] = 'course';
  return $qvars;
}

add_filter( 'query_vars', 'my_query_vars' );

我认为你应该使用,

example.org/great-lesson/my-first-course

而不是使用

example.org/my-first-course/great-lesson

因为 great-lesson 在这里是静态的,而 idslug 是动态的,显示详细 course/lesson.

并添加您可以使用的自定义重写规则,

function custom_rewrite_basic() {
  add_rewrite_rule('^great_lesson/(.*)', 'index.php?page_id=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_basic');

然后从url中得到slug,并据此编写代码。阅读更多关于 add_custom_rule