如何将非层次分类显示为带有复选框的术语?

时间:2012-07-17 作者:Philip Downer

我希望在“添加/编辑帖子管理”屏幕中为自定义帖子类型显示非层次自定义分类法。显然,当自定义分类法是非层次化的时,显示的元框与标记类似-它是一个带有自动建议的文本字段。

然而,我更感兴趣的是将一个平面的、非层次的分类法显示为复选框术语列表。本质上,我希望它的功能与类别相同,只是不能添加子术语。

当然,这是其他开发人员所做的事情,但正常的谷歌搜索并没有给我带来多少回报。显然地this was the default behavior 当自定义分类法最初在v2中引入时。8.

Example of non-hierarchical taxonomy with checkboxes

我真的不是在寻找插件解决方案,但是插件的代码示例就可以了。在为客户开发网站时,允许他们查看特定帖子类型的预设条款列表通常是有益的。应该允许客户添加附加条款,而不是附加子条款。

7 个回复
最合适的回答,由SO网友:Alex Hommel 整理而成

我不确定,您是否已经找到了解决方案,但当我昨天搜索类似的解决方案时,我发现关于WPtuts的本教程非常有用。它使用单选按钮,但您可以轻松地对其进行修改,使其与复选框一起工作。http://wp.tutsplus.com/tutorials/creative-coding/how-to-use-radio-buttons-with-taxonomies/

SO网友:Chrisdigital

我得到了一个解决方案(基于上面的tutsplus教程链接),它可以处理这里的实际复选框:http://wordpress.org/support/topic/display-tag-admin-box-like-categories-without-hierarchy 它忽略了tutsplus链接所指向的metabox的“最常用”选项卡,但就我个人而言,我保持简单。

SO网友:Maxwell s.c

现在,在2020年,我找到了最明确、最简单的解决方案:

    register_taxonomy( "my_tax", [ "my_post" ], [
        ...
        "meta_box_cb" => "post_categories_meta_box",
    ] );
您可以通过meta_box_cb 更改metabox函数。如果您使用post_categories_meta_box, 非层次分类法将使用层次编辑器。这里有一个小问题,您仍然可以选择父类别(但它不会将其设置为父类别)。只需隐藏select输入即可解决此问题。

SO网友:jam

请原谅我的法语,但为什么不使用内置的hierarchyal=true,然后使用admin css隐藏所有父Dropbox?

SO网友:Laurent

我会这样做:

$add_action(\'add_meta_boxes_my_posttype\', \'my_add_meta_boxes\');

function my_add_meta_boxes ($post) {

    $taxoms = array(\'my_taxonomy\', \'my_second_taxonomy\');

    foreach ( get_object_taxonomies( $post ) as $tax_name ) {
        if( !in_array($tax_name, $taxoms) ) continue;

        $taxonomy = get_taxonomy($tax_name);
        if ( ! $taxonomy->show_ui )
            continue;

        $label = $taxonomy->labels->name;

        if ( !is_taxonomy_hierarchical($tax_name) ) {
            add_meta_box($tax_name . \'div\', $label, \'post_categories_meta_box\', null, \'side\', \'core\', array( \'taxonomy\' => $tax_name ));
            remove_meta_box(\'tagsdiv-\' . $tax_name, null, \'side\');
        }
    }
}
之后,由您来隐藏窗体的父选择框

SO网友:Maxwell s.c

使用层次结构并隐藏父选择,如下所示:

function hide_taxonomy_parent( $slug ) {
    add_action( \'admin_head\', function () use ( $slug ) {
        echo "<style>
            .taxonomy-{$slug} .term-parent-wrap,
            [for=\'new{$slug}_parent\'],
            #new{$slug}_parent {
                display: none !important;
                visibility: hidden !important;
            }
        </style>";
    } );
}

hide_taxonomy_parent( \'brand\' );

SO网友:Thành Nhân

My solution:

function custom_register_taxonomy_args( $args, $name, $object_type ) {
    global $pagenow;

    if ( $name == \'product_cat\' && ( $pagenow == \'post-new.php\' || $pagenow == \'post.php\' ) ) {
        $args[\'hierarchical\'] = true;
    }

    return $args;
}
add_filter( \'register_taxonomy_args\', \'custom_register_taxonomy_args\', 10, 6 );
结束

相关推荐

Get_Categories仅获取主语言的类别

我试图在“content composer”中检索基于活动语言的项目类别。但我只从主要语言中获取类别,而没有从其他语言中获取类别。我的代码是:类别全部 $categories = get_categories(\'taxonomy=jw_portfolio_categories\'); if(!empty($categories)){ foreach($categories