我有一个自定义的帖子类型和一个为其注册的自定义分类法。自定义post类型称为“存储卡”,分类法称为“课程”。对于这种分类法,我创建了两个术语“英语”和“法语”。
当我转到此url时:
example.com/lesson/english
或
example.com/lesson/french
一切都按预期进行,它指示我归档页面或创建分类法。php或分类英语。php。
但是当我尝试的时候
example.com/lesson
“我获取未找到页面”错误。
我的问题是我是否做错了什么?难道我不应该进入所有“课程”的归档页面吗?我在register taxonomy参数中尝试了以下内容:
\'rewrite\' => array( \'slug\' => \'lesson\' ),
以及
\'rewrite\' => true,
但没有一个奏效。我见过其他类似的问题,但他们主要关注术语链接,而不是分类链接。此外,大多数教程讨论的是分类法的层次结构,而不是分类法的链接。
以下是创建分类法的代码:
$labels = array(
\'name\' => _x( \'Lessons\', \'taxonomy general name\', \'textdomain\' ),
\'singular_name\' => _x( \'Lesson\', \'taxonomy singular name\', \'textdomain\' ),
\'search_items\' => __( \'Search Lessons\', \'textdomain\' ),
\'all_items\' => __( \'All Lessons\', \'textdomain\' ),
\'parent_item\' => __( \'Parent Lesson\', \'textdomain\' ),
\'parent_item_colon\' => __( \'Parent Lesson:\', \'textdomain\' ),
\'edit_item\' => __( \'Edit Lesson\', \'textdomain\' ),
\'update_item\' => __( \'Update Lesson\', \'textdomain\' ),
\'add_new_item\' => __( \'Add New Lesson\', \'textdomain\' ),
\'new_item_name\' => __( \'New Lesson Name\', \'textdomain\' ),
\'menu_name\' => __( \'Lessons\', \'textdomain\' ),
);
$args = array(
\'hierarchical\' => true,
\'labels\' => $labels,
\'show_ui\' => true,
\'show_admin_column\' => true,
\'query_var\' => true,
\'rewrite\' => array( \'slug\' => \'lesson\'),
);
register_taxonomy( \'lesson\', array( \'memory-cards\' ), $args );
最合适的回答,由SO网友:Sally CJ 整理而成
但是当我尝试的时候
example.com/lesson
“我获取未找到页面”错误。
就像我在对你的问题的评论中指出的那样,这实际上就是它的工作原理,其中术语slug需要在URL中指定。这就是为什么example.com/lesson/english
(术语slug为english
) 和example.com/lesson/french
(术语slug为french
) 工作,但不是example.com/lesson
(未指定术语段塞)。
所以有一种方法example.com/lesson
通过设置has_archive
参数到lesson
注册CPT时memory-cards
通过register_post_type()
. 例如:
register_post_type( \'memory-cards\', array(
\'labels\' => array(
\'name\' => \'Memory Cards\',
\'singular_name\' => \'Memory Card\',
),
\'public\' => true,
\'has_archive\' => \'lesson\',
) );
但这也意味着,
example.com/memory-cards
, 这是您的
memory-cards
CPT(当
has_archive
设置为
true
), 将不再显示CPT存档。
要解决此问题或保留默认存档URL,可以使用add_rewrite_rule()
为添加重写规则example.com/lesson
, 像这样:
register_taxonomy( \'lesson\', \'memory-cards\', array(
\'labels\' => array(
\'name\' => \'Lessons\',
\'singular_name\' => \'Lesson\',
),
\'rewrite\' => true,
// ...other args here...
) );
add_rewrite_rule( \'lesson/?$\', \'index.php?post_type=memory-cards\', \'top\' );
add_rewrite_rule( \'lesson/page/(\\d+)/?$\', \'index.php?post_type=memory-cards&paged=$matches[1]\', \'top\' );
第二条重写规则将处理分页请求,例如
example.com/lesson/page/2/
.