在WordPress后台管理界面,如何修复自定义分类法中某个术语的默认文章类型错误?
我在一个WordPress插件中创建了一个自定义文章类型“Model”和一个对应的自定义分类法“Domain”。
register_taxonomy(
'domain',
array( 'model' ),
array(
'label' => 'Domain',
'hierarchical' => true,
// ...
'rewrite' => array( 'slug' => 'domains' ),
)
);
// ...
register_post_type(
'model',
array(
'label' => 'Model',
'hierarchical' => false,
// ...
'taxonomies' => array( 'domain' ),
'rewrite' => array( 'slug' => 'models' ),
)
);
当我在后台菜单中注册该分类法的菜单时,我得到的是WordPress自动生成的用于编辑该分类法术语的页面。
add_submenu_page(
'my-top-level-menu',
__( 'Domains', 'my-plugin-slug' ),
__( 'Domains', 'my-plugin-slug' ),
'manage_domains',
'edit-tags.php?taxonomy=domain'
);
在自动生成的页面中,术语列表表格包含一个指向路由/wp-admin/edit.php?domain=default的链接。然而,请求该路由时,显示的是内置的文章列表,而不是模型类型的文章。
我猜WordPress在 URL查询参数中未设置post_type时,在edit.php中将默认的文章类型设为“post”。如何处理该分类法的错误默认post_type?
解决方案
问题出在打开分类法页面的方式。当你像下面这样添加子菜单时
'edit-tags.php?taxonomy=domain'
WordPress会在URL中不带任何post_type时加载分类法页面。当发生这种情况,WP会默认将文章类型设为post。因此,术语列表中的链接(例如术语计数)在生成时也未指定post_type,结果你会跳转到
/wp-admin/edit.php?domain=default
显示的是普通文章,而不是你的模型文章类型。
要修复这个问题,你只需要在子菜单的slug中包含post_type=model。比如:
add_submenu_page(
'my-top-level-menu',
__( 'Domains', 'my-plugin-slug' ),
__( 'Domains', 'my-plugin-slug' ),
'manage_domains',
'edit-tags.php?taxonomy=domain&post_type=model'
);
站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。