今天,我需要更改已由第三方插件注册的自定义分类法的参数。具体来说,我想将show_admin_column参数设置为true并更改rewrite子弹,以使其不仅仅是分类标准子弹。在这种情况下,它是带有“人物类别”自定义分类法的“人物”帖子类型。

我很惊讶以前没有问过这个,所以这是一个问题和答案。

评论

对于任何陷入困境的人来说,这只是一个旁注,请记住在检查结果之前冲洗永久链接。

#1 楼

register_taxonomy()是这项工作的工具。在法典中:


该功能添加或覆盖了分类法。


一种选择是复制register_taxonomy()$args并对其进行修改。但是,这意味着将来对原始register_taxonomy()代码的更改都会被覆盖。

因此,至少在这种情况下,最好获取原始参数,修改我想要更改的参数,然后重新注册分类法。此解决方案的灵感来自@Otto,它回答了有关自定义帖子类型的类似问题。

使用示例中的people自定义帖子类型和people_category分类法,将做到这一点:

function wpse_modify_taxonomy() {
    // get the arguments of the already-registered taxonomy
    $people_category_args = get_taxonomy( 'people_category' ); // returns an object

    // make changes to the args
    // in this example there are three changes
    // again, note that it's an object
    $people_category_args->show_admin_column = true;
    $people_category_args->rewrite['slug'] = 'people';
    $people_category_args->rewrite['with_front'] = false;

    // re-register the taxonomy
    register_taxonomy( 'people_category', 'people', (array) $people_category_args );
}
// hook it up to 11 so that it overrides the original register_taxonomy function
add_action( 'init', 'wpse_modify_taxonomy', 11 );


请注意,我将第三个register_taxonomy()参数转换为期望的数组类型。由于register_taxonomy()使用可以处理wp_parse_args()objectarray,因此这不是严格必需的。就是说,根据法典,应将register_taxonomy()$args作为array提交,因此这对我来说是正确的。

评论


我正在尝试执行此操作,以将统一分类法更改为分层分类法。我只是将阶层属性更改为true。这样,它会在帖子编辑屏幕的右侧导致两个用于分类法的元框,而我实际上无法添加分类法...

–乔尔·沃舍姆(Joel Worsham)
2015年4月8日在16:48

确保使用与原始分类法相同的标记(例如'people_category'),以便将其覆盖。

–mrwweb
2015年4月8日在17:21

天才!天才!工作完美!

–戴维·杰克(DaveyJake)
2015年5月31日上午10:02

我发现此解决方案存在一个问题:capabilities参数在内部以cap的形式存储,因此不会传递给新的注册分类法。在这里查看我对类似问题的回答

–法比恩·夸特拉沃(Fabien Quatravaux)
2015年12月14日上午8:37

太好了,我用它向自定义分类法中添加了层次化网址。

–布莱恩·佩特(Brian Peat)
18/12/2在23:36