将类添加到Gutenberg编辑器以用于自定义帖子类型

时间:2019-02-09 作者:Kit Johnson

我已使用注册了自定义帖子类型register_post_type(\'myposttype\', ...). 在发布的帖子上,有一个自定义类应用于页面的整个主体,single-myposttype. 我使用这个body类应用css规则,使帖子与非自定义帖子类型的帖子不同。

既然古腾堡编辑器是Wordpress的关键部分,我希望在处理这些自定义帖子类型时能够向编辑器添加一个自定义正文类,以便在编辑过程中应用应用于已发布帖子的相同样式规则。

我看到了一些已回答的问题(例如。this one) 但是,如果我理解正确,它们将应用于所有帖子和页面的编辑器,而不仅仅是自定义帖子类型。

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

这个钩子应该在编辑器页面的主体中添加一个-[post\\u type]类。

add_filter(\'admin_body_class\', function ($classes) { 
        //get current page
        global $pagenow;

        //check if the current page is post.php and if the post parameteris set
        if ( $pagenow ===\'post.php\' && isset($_GET[\'post\']) ) {
            //get the post type via the post id from the URL
            $postType = get_post_type( $_GET[\'post\']);
            //append the new class
            $classes .= \'single-\' . $postType;
        } 
        //next check if this is a new post
        elseif ( $pagenow ===\'post-new.php\' )  {
            //check if the post_type parameter is set
            if(isset($_GET[\'post_type\'])) {
                //in this case you can get the post_type directly from the URL
                $classes .= \'single-\' . urldecode($_GET[\'post_type\']);
            } else {
                //if post_type is not set, a \'post\' is being created
                $classes .= \'single-post\';
            }


        }
    return $classes;
}); 

SO网友:birgire

我们可以使用当前屏幕对象添加single-{post_type} 到其块编辑器页面的管理主体类:

add_filter( \'admin_body_class\', function ( $classes ) {
    $screen = get_current_screen();
    return $screen->is_block_editor() && $screen->post_type
        ? $classes . \' single-\' . $screen->post_type
        : $classes;
} );
。。。但是对于editor styles:

add_theme_support( \'editor-styles\' );
add_editor_style( \'style-editor.css\' );
那里的CSS将自动加上前缀.editor-styles-wrapper 类别选择器。也包括所有body 选择器替换为.editor-styles-wrapper. 我想这是为了使编辑器样式向后兼容,因为它以前是在iframe中加载的,没有任何前缀,如handbook.

也可以使用enqueue_block_assets 在编辑器管理页面和前端都加载样式表,但如果我们不使用特定的CSS选择器,可能会弄乱整个管理编辑器布局。因此,我认为这最好用于针对特定的块,而不是一般的布局调整。

相关推荐