如何在WordPress的动态块中存储信息?

时间:2020-03-31 作者:echodrome

我正在尝试开发一个动态块插件,其中我使用Gutenberg存储多达7个链接,到目前为止,这是我代码的一部分:

edit: props => {

  const {
    attributes: {
      links = [],
      max_links = 7
    },
    setAttributes
  } = props;

  const onChangeLink = (index, newLink) => {
    setAttributes({ links[index]: newLink });
  };

  const listItems = () => {
    var items = [];

    for(var i=1;i<max_links+1;i++) {
      items.push(
        <RichText
          placeholder={__("Link "+i, "wpblock")}
          value={links[i]}
          onChange={onChangeLink} />
      );
    }

    return items;
  };

  return [
    <div>
      <h2>Quick Links</h2>
      <ul>
        {listItems()}
      </ul>
    </div>
  ];
},

save(props) {
  return null;
}
在保存时,我返回null,因为我将在php端将此部分作为回调处理。我在LinkedIn课程中看到了这一技术,它允许将来修改插件,而不会破坏已经使用插件的页面上的插件。

我的问题是:

1) 如何存储链接的值以使其保持不变?我看到过一些例子,但他们似乎总是将数据存储在帖子中,这似乎有些过头了。我也读过WP选项,但我也不确定这是我的最佳方法,或者我是否可以将其用于React?

2) 我的onChangeLink函数不起作用,我不确定如何调用它以便传递要编辑的链接的索引?

1 个回复
SO网友:echodrome

我自己的问题的答案是,你不能。当你创建一个动态块时,你完全依赖服务器端(PHP)来生成内容,然后JS可以从HTML重建,但你不能让它以相反的方式发生。

因此,除非我创建一个自定义表,或者可以从API获取数据,PHP可以在JS之前访问这些数据,否则就无法实现我想要的。

相关推荐

如何从WordPress菜单添加帮助Scout javascript LiveChat

我的客户希望从这里的网站添加实时聊天脚本代码,但他希望它放在特定菜单/联系人菜单上/我不知道如何实现它。请告诉我对此的任何想法,我对javascript不是很熟悉这是用于实时聊天的javascript:<script type=\"text/javascript\">!function(e,t,n){function a(){var e=t.getElementsByTagName(\"script\")[0],n=t.createElement(\"script\");n.type=\"te