自定义帖子类型链接层次结构

时间:2017-07-05 08:56:44

标签: php wordpress url-rewriting custom-post-type

我必须独立定制帖子类型:

  1. 当然
  2. 因此,一门课程可以有很多课程,一堂课可以在很多课程中使用。这是一个m:n关系。

    现在我的内容应该仅在课程页面上显示,如果是从特定课程查看的话。

    实际上链接结构是这样的:

    1. 转到课程: example.org/my-first-course
    2. 我看到了与本课程相关的所有课程
    3. 点击课程。链接结构是: example.org/great-lesson
    4. 我现阶段的问题是,我不知道从哪个课程开始,我打电话给你。

      我可以做的一件事是将课程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' );
      

1 个答案:

答案 0 :(得分:0)

我认为你应该使用,

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

而不是使用

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

因为great-lesson在此处是静态的,idslug是动态的,会显示详细的课程/课程。

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

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