Gutenberg:特定帖子类型的侧边栏

时间:2019-01-22 作者:josias

我想找到一种方法,创建一个只在自定义帖子类型上可见的古腾堡提要栏。

例如,我希望带有设置的侧栏(如自定义复选框)仅与页面相关,在自定义帖子类型上无法访问。

与其为特定的帖子类型创建侧栏,不如从特定的帖子类型中删除侧栏。

我还没有找到任何方法来实现这一点,有什么想法吗?

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

我知道这个问题已经提出了几个月了,但我使用以下代码绕过了这个问题,并认为它可能对其他人有所帮助。也许有更好的方法,但这是可行的:

import ColorSchemeSelect from "./components/color-scheme-select";
import includes from "lodash/includes";

const { select } = wp.data;
const { registerPlugin } = wp.plugins;
const { PluginSidebar } = wp.editPost;

registerPlugin(\'ahr-sidebar-post-options\', {
  render() {
    const postType = select("core/editor").getCurrentPostType();
    if ( !includes(["post", "page"], postType) ) {
      return null;
    }

    return (
      <PluginSidebar name="ahr-sidebar-post-options" icon="admin-customizer" title="Color settings">
        <div style={{ padding: 16 }}>
          <ColorSchemeSelect />
        </div>
      </PluginSidebar>
    );
  },
});
在我的示例中,我只想显示帖子和页面的某个侧栏,所以我使用!includes(["post", "page"], postType) 要测试惠特与否,应显示侧栏。如果你只想要一个特定的职位类型,你就去postType === "my-post-type" 相反

SO网友:a_zero

要向自定义帖子类型添加侧栏,只需在条件后添加侧栏:

class SidebarRender extends Component {
  [...]
}

var postType = select("core/editor").getCurrentPostType();
if (postType === "my_post_type")
  registerPlugin("my-sidebar", {
    icon: "excerpt-view",
    render: SidebarRender
});

SO网友:Kuuak

解决方案是等到dom就绪后再获取当前的post类型。如果不等待,选择器将返回null

import domReady from \'@wordpress/dom-ready\';
import { Component } from \'@wordpress/element\';
import { select } from \'@wordpress/data\';

class MySidebarPlugin extends Component {
    [...]
}

domReady(() => {
    if (select(\'core/editor\').getCurrentPostType() !== \'post\') return;

    registerPlugin(\'my-sidebar-plugin\', {
        icon: \'admin-plugins\',
        render: MySidebarPlugin,
    });
});

相关推荐