Gutenberg通过wp.hooks.addFilter修改核心分类面板元素

时间:2019-03-25 作者:helgatheviking

我已经研究过修改现有的编辑器元素……但几乎没有。但我确实在Github得到了一个很好的回复,指出了这一点:https://github.com/WordPress/gutenberg/tree/master/packages/editor/src/components/post-taxonomies#custom-taxonomy-selector

显然,分类小组可以通过wp.hooks.addFilter. 这是一个很好的开始!我已经能够使用该代码片段模拟一些虚拟代码,用Dashicon替换分类法面板。

(function ( hooks, editor, components, i18n, element, compose ) {

    var el = wp.element.createElement;
    var Dashicon = wp.components.Dashicon;

    function CustomizeTaxonomySelector( OriginalComponent ) {

        return function( props ) { 

            if ( RB4Tl18n.radio_taxonomies.indexOf( props.slug ) ) { 

                var testprops = { className: \'bacon-class\', icon: \'admin-users\' };

                return el( 
                    Dashicon,
                    testprops 
                );

            } else {
                return el(
                    OriginalComponent,
                    props
                );
            }
        }
    };

    wp.hooks.addFilter(
        \'editor.PostTaxonomyType\',
        \'RB4T\',
        CustomizeTaxonomySelector
    );

} )( window.wp.hooks, window.wp.editor, window.wp.components, window.wp.i18n, window.wp.element, window.wp.compose )
显然,这不是很有用,但我必须从某个地方开始。所以我的问题是,有没有可能OriginalComponent 函数并修改其输出?我知道如何使用PHP过滤器实现这一点,但在这种情况下OriginalComponentHierarchicalTermSelector react函数,我不知道如何修改它呈现的内容,我想我缺少了成功搜索的词汇表。

在我的用例中,所有数据都几乎相同(我需要列出的所有术语),只是我想切换<input type="checkbox"><input type="radio">. 或者我必须复制并编写自己版本的HierarchicalTermSelector 要素

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

因为your plugin 处理层次和非层次分类法,那么我认为复制HierarchicalTermSelector 组件,并从CustomizeTaxonomySelector 作用

你可以看到我是怎么做到的here &mdash;Updated to use the JavaScript Build Setup which makes things like transpilation super easy.

这个插件(或者JavaScript之类的东西)并不完美,但作为一个起点应该足够好了。你会看到这样的东西:

附言:在演示中,类别“Test”和标记“Test”共享相同的名称,但它们的分类不同。“测试2”类别和标签“测试2”也是如此。

相关推荐

Display Custom Taxonomy names

我正在尝试显示自定义帖子类型的自定义分类法。因此,此分类法特定于此自定义帖子类型。不幸的是,我无法让它们显示出来。这是我在函数中的代码。php注册自定义分类法:add_action(\'init\', \'products_categories\', 0); function products_categories(){ $labels = array (\'name\' => _x(\'Product Categories\',\'taxonomy general nam