我创建了一个自定义的帖子类型和一个自定义的分类法,除了一件特殊的事情之外,一切都很好。
首先,我的用例:我需要它像分类系统一样运作not 保持层次结构(仅一个级别),因此我将两者都保留为默认设置false
对于hierarchical
背景
这很好,除了一个允许我在metabox中添加“子级别”的问题。
First, the code:
register_post_type( \'letter\',
array(
\'labels\' => array(
\'name\' => __( \'Letters\' ),
\'singular_name\' => __( \'Letter\' ),
//..........
),
\'public\' => true,
\'taxonomies\' => array(\'letter\'),
//........
)
);
// Our args for the custom taxonomy below
$args = array(
\'labels\' => array(
\'name\' => __(\'Recipients\'),
\'singular_name\' => __(\'Recipient\'),
//.....
),
\'meta_box_cb\' => \'post_categories_meta_box\',
);
// Register a custom taxonomy for our letter categories
register_taxonomy( \'recipient\', \'letter\', $args );
// Connect the post type and taxonomy together to be safe
register_taxonomy_for_object_type( \'recipient\', \'letter\' );
现在,正如你所看到的,我需要设置
meta_box_cb
到
post_categories_meta_box
否则,它最终将具有
tag metabox,现在看起来是这样的:
这很好,我得到了我喜欢的分类功能,但是我也得到了“添加新收件人”,当你打开它时,它允许你添加一个新的“收件人”,并选择一个
parent 收件人<这是我的
not 希望
是基于post_categories_meta_box
函数并删除相应的代码以摆脱父功能?
我并不特别想这样做,因为这样会破坏此函数的未来更新。
还有其他选择吗?
最合适的回答,由SO网友:jerclarke 整理而成
This blog post by "Gazchap" 准确处理您的情况,并在发布您的后续问题后进行更新:
幸运的是,WordPress的4.4版引入了一个过滤器,即post\\u edit\\u category\\u parent\\u dropdown\\u args,可以用来控制这些元框中显示的父项。它的设计目的是让开发人员更改列出的术语,例如排除某些类别,或者只显示“顶级”父术语,而不显示其后代。没有设计用来阻止菜单显示的控件,但有一个控件允许我们欺骗WordPress隐藏父下拉选择。
以下是您需要的过滤器:
add_filter( \'post_edit_category_parent_dropdown_args\', \'hide_parent_dropdown_select\' );
function hide_parent_dropdown_select( $args ) {
if ( \'YOUR_TAXONOMY_SLUG\' == $args[\'taxonomy\'] ) {
$args[\'echo\'] = false;
}
return $args;
}
为什么会这样?默认情况下,echo参数设置为true,并使WordPress echo下拉列表选择到元框中。通过将其设置为false,WordPress将返回HTML,因此不会呈现到浏览器中。
请注意,当然YOUR_TAXONOMY_SLUG
应替换为自定义分类法的slug。
任何试图进行此黑客攻击的人都应该阅读完整的博客文章,它还有一些其他有用的提示。