我可以防止用户在分类元数据中添加超过两个级别的术语吗?

时间:2014-01-30 作者:RachieVee

我正在WordPress中创建一个分层的教程结构,并希望构建它,以便在不需要用户代码的情况下设置前端。

到目前为止,我有一个名为“tut\\u page”的自定义帖子类型,它有一个用于自定义分类的元框,名为“tut\\u group”,可以通过分类元框添加术语。对于我的register\\u分类法,“Hierarchy”的值已设置为true。所以我想要层次,但我不想要超过两层的深度。我知道我可以选择在一个模板中显示多少级别的术语,但是否有一种方法可以阻止用户创建比分类元数据库中的两个级别更深的术语?

这是我在函数中的内容。用于注册分类的php:

function create_tutorial_topic() {
    register_taxonomy(
        \'tut_group\', //name of taxonomy
        \'tut_post\', //object type e.g. our post type
        array(
                \'labels\' => array(
                \'name\' => _x( \'Tutorial Group\', \'taxonomy general name\' ),
                \'singular_name\' => _x( \'Tutorial Groups\', \'taxonomy singular name\' ),
                \'search_items\' =>  __( \'Search Tutorial Groups\' ),
                \'all_items\' => __( \'All Tutorial Groups\' ),
                \'parent_item\' => __( \'Parent Tutorial Groups\' ),
                \'parent_item_colon\' => __( \'Parent Tutorial Groups:\' ),
                \'edit_item\' => __( \'Edit Tutorial Group\' ),
                \'update_item\' => __( \'Update Tutorial Group\' ),
                \'add_new_item\' => __( \'Add Tutorial Group\' ),
                \'new_item_name\' => __( \'New Tutorial Group\' ),
                \'menu_name\' => __( \'Tutorial Group\' ),
            ),
            \'rewrite\' => array( \'slug\' => \'tutorial-group\' ),
            \'hierarchical\' => true, //this is true but I only want two levels deep
        )
    );
}
我也希望自己尽可能多地构建这个,而不必使用插件。我尝试在这个网站上搜索,发现了关于限制术语数量的问题,但没有层次结构。感谢您提前提供任何提示!

1 个回复
最合适的回答,由SO网友:fischi 整理而成

不幸的是,这是不可能的,至少不安全。

功能wp_insert_term( $term, $taxonomy, $args = array() ) 处理分类法创建的方法提供了一些过滤器和挂钩,但在数据库中创建术语之前唯一的过滤器和挂钩是

$term = apply_filters( \'pre_insert_term\', $term, $taxonomy );
如您所见$args 在创建术语时提供的信息不会传递给过滤器,因此您无法通过查找$args[\'parent\'].

一种丑陋的做法是在术语创建之后,与动作挂钩created_termcreate_term, 并在那里检查。我自己从来没有这样做过,你可能会打开一大罐蠕虫,在创建后删除这个术语,之后不可能返回错误。

如果过滤器pre_insert_term 将接受$args 作为论据,这对我没有问题。

结束

相关推荐

将php快捷代码转换为小工具

我有一段php,它以我需要的格式调用一段简短的代码,其中包含今天的日期。<?php $today = date(\'d.m\');echo do_shortcode(\'[table id=1 column_widths=\"10%|10%|80%\" filter=\"\'.$today.\'\" /]\'); ?>我可以把它放在一个页面模板中,这样就可以了,但我想在html/txt小部件中使用它。如何从上面制作小部件?