我必须独立定制帖子类型:
因此,一门课程可以有很多课程,一堂课可以在很多课程中使用。这是一个m:n关系。
现在我的内容应该仅在课程页面上显示,如果是从特定课程查看的话。
实际上链接结构是这样的:
我现阶段的问题是,我不知道从哪个课程开始,我打电话给你。
我可以做的一件事是将课程ID作为get参数附加到链接: example.org/great-lesson/?course_id=123
但是我想要一个更像这样的链接结构: example.org/my-first-course/great-lesson
我该怎么做?
。::更新:解决方案::。
这是我的解决方案,也许它会帮助别人。
如果您使用“add_rewrite_rule”,请不要忘记更改自定义帖子类型的slug(slug-custom-post-type)以及查询var(cpt-query-var)。
我尝试使用index.php?name=$matches[1]
,但它会重定向到自定义帖子类型,并且网址中的所有其他信息都将丢失。因此,重要的是使用自定义帖子类型查询var。
要访问“课程”,您必须使用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' );
答案 0 :(得分:0)
我认为你应该使用,
example.org/great-lesson/my-first-course
而不是使用
example.org/my-first-course/great-lesson
因为great-lesson
在此处是静态的,id
或slug
是动态的,会显示详细的课程/课程。
要添加自定义重写规则,您可以使用
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