在WordPress后台管理界面,如何修复自定义分类法中某个术语的默认文章类型错误?

编程语言 2026-07-12

我在一个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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章