自定义 post 类型 link 层次结构
custom post types link hierarchy
我必须独立自定义 post 类型:
- 课程
- 课程
所以一门课程可以有很多课,一课可以用于多门课程。这是一个 m:n 关系。
现在,如果从特定课程查看,我的内容应该只在课程页面上可见。
其实link结构是这样的:
- 转到课程:示例。org/my-first-course
- 我看到了与这门课程相关的所有课程
- 单击课程。 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
在这里是静态的,而 id
或 slug
是动态的,显示详细 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
我必须独立自定义 post 类型:
- 课程
- 课程
所以一门课程可以有很多课,一课可以用于多门课程。这是一个 m:n 关系。
现在,如果从特定课程查看,我的内容应该只在课程页面上可见。
其实link结构是这样的:
- 转到课程:示例。org/my-first-course
- 我看到了与这门课程相关的所有课程
- 单击课程。 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
在这里是静态的,而 id
或 slug
是动态的,显示详细 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