在古登堡保存功能中获取当前标签列表

时间:2021-01-05 作者:Prestosaurus

我正在尝试获取save函数中给定帖子的当前标记列表,以便在页面上呈现。

这里有一个类似的Q:How to return a list of custom taxonomy terms via the Gutenberg getEntityRecords method, 但我不确定这是否是我问题的解决方案?

此分类设置为\'show_in_rest\' => TRUE,.

我尝试了以下几种尝试:

save: function() {

  // #1:
  var tag_array = wp.data.select("core/editor").getCurrentPostAttribute("custom_taxonomy");
  var tag_list = [];
  if (tag_array) {
    tag_array.forEach(
      tag => tag_list.push(
        el(\'li\', null, wp.data.select(\'core\').getEntityRecord(\'taxonomy\', \'custom_taxonomy\', tag))
      ),
    );
  }

  // #2:
  const tag_array = wp.data.select("core/editor").getCurrentPostAttribute("custom_taxonomy");
  const tag_objects = wp.data.select(\'core\').getEntityRecords(\'taxonomy\', \'custom_taxonomy\', tag_array);
  var tag_list = [];
  tag_objects.forEach(
    tag => tag_list.push(
      el(\'li\', null, tag.name)
    )
  );
}
尝试#1 返回对象

企图#2 不会将结果筛选到给定的当前标记ID,并返回分类法中标记的整个列表。

wp.data.select("core/editor").getCurrentPostAttribute("custom_taxonomy"); 返回正确的标记ID。

是否有方法加载ID为的标记名(而不是.getEntityRecord())?

有点不确定我在这里遗漏了什么,我如何才能获得当前帖子所选标签的列表?

1 个回复
SO网友:Sally CJ

企图#1 返回对象

如果我理解正确,那是因为getEntityRecord(), 成功请求REST API端点后(例如。/wp/v2/categories/<id>), 返回包含名称和ID等术语属性的术语对象数据。

所以

// Instead of:
el(\'li\', null, wp.data.select(\'core\').getEntityRecord(\'taxonomy\', \'custom_taxonomy\', tag))

// you\'d use: (note the ".name")
el(\'li\', null, wp.data.select(\'core\').getEntityRecord(\'taxonomy\', \'custom_taxonomy\', tag).name)
企图#2 不会将结果筛选到给定的当前标记ID,并返回分类法中标记的整个列表。

的第三个参数getEntityRecords() 实际上是一个parameters listed here 例如include 用于将结果集限制为特定(术语)ID,因此在;尝试#2 quo;,您可以这样做,将结果限制在给定的术语ID内:

const tag_objects = wp.data.select(\'core\').getEntityRecords(\'taxonomy\', \'custom_taxonomy\', {
    include: tag_array
});
然而,应该注意的是,因为getEntityRecord()getEntityRecords() 如果执行AJAX请求,它们不会立即从服务器返回结果或响应,因此不要期望出现以下情况const term = getEntityRecord( \'taxonomy\', ... ); console.log( term.name ); (始终)工作,因为term 可能是undefined (或其他)而不是术语对象/数据。

其次,不要将标签/术语作为元素返回save 回调,使用dynamic block 您可以使用一个属性来保存术语ID,然后使用PHP在前端输出HTML?这样,当编辑帖子后更新任何术语时,前端显示的术语数据也将更新,而无需首先编辑帖子(然后更新块输出,即save 输出)。

但这只是一个建议。:)

相关推荐

Show all Tags in each post

我创建了一个名为“Project”的新帖子类型。我在其中注册了1个分类“标记”,如下所示:https://pastecode.xyz/view/844258b1我在post type“Project”中的1篇文章中输入了标签。如果要输入文章,它将显示该文章中的所有标记。谁能帮帮我吗。非常感谢。