使用 wp_insert_post() 时如何在 post_content 中插入古腾堡块?
Posted
技术标签:
【中文标题】使用 wp_insert_post() 时如何在 post_content 中插入古腾堡块?【英文标题】:How to insert gutenberg block inside post_content when using wp_insert_post()? 【发布时间】:2020-02-16 19:09:46 【问题描述】:我想在 php 中生成一个古腾堡块。
我目前正在开发一个 wordpress 插件,它可以从 youtube 导入视频并为每个视频创建一个帖子。 我可以在 post_content 中插入 youtube 视频,但是当我使用古腾堡编辑器编辑帖子时,它不会显示为一个块。
我在这里阅读了大部分“块编辑器手册”https://developer.wordpress.org/block-editor/ 但除了如何创建自定义块之外,我找不到任何东西。 我也在谷歌上搜索过,但我发现的一切都是关于创建自定义块的。 然而我发现gutenberg块作为html评论存储在post_content中,但评论似乎是通过gutenberg WYSIWYG编辑器用js生成的。
我知道我可以使用这些块创建一个帖子并从我的数据库中复制 post_content 然后将其用作“模板”,但我认为这不是正确的方法。
是否有任何关于使用 wordpress 附带的块(即:embed、paragraphe)并生成 html 评论的文档,该评论通过 php 保存在 post_content 中? 有可能吗?
【问题讨论】:
您非常接近使用 post_content 作为“模板”。您可以使用 2 个方便的功能。parse_blocks()
将 HTML-cmets 内容转换为代表块的实际 PHP 数组,render_block()
将在保存到数据库时将数组转换回内容。这是一篇关于这些功能的好文章billerickson.net/access-gutenberg-block-data
【参考方案1】:
当您手动添加 YouTube 块时,单击“工具和选项”菜单(右侧)中的“代码编辑器”视图。在代码编辑器视图中,您将看到编辑器正确解析块所需的 HTML。
例如:
<!-- wp:core-embed/youtube "url":"https://www.youtube.com/watch?v=VIDEOID","type":"video","providerNameSlug":"youtube","className":"wp-embed-aspect-16-9 wp-has-aspect-ratio" -->
<figure class="wp-block-embed-youtube wp-block-embed is-type-video is-provider-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
https://www.youtube.com/watch?v=VIDEOID
</div></figure>
<!-- /wp:core-embed/youtube -->
【讨论】:
它比在数据库中查找更方便,但它看起来仍然是一种解决方法。我希望有另一种解决方案,如果我必须为要用于创建任何帖子的每个块都这样做,那将有点乏味。 我认为 Gutenberg 的一些逻辑可能是由它使用的 javascript 库生成的,有人可以确认吗?【参考方案2】:今天我不得不以编程方式更新 Gutenberg 块的内容。
我用了两种方法:
parse_blocks()
读取现有数组,我可以将其修改为 PHP 中的任何数组。
render_blocks()
然后将内容添加到帖子 post_content;
然后可以通过wp_update_post()
保存帖子数组。
阅读这篇文章很有帮助https://www.billerickson.net/access-gutenberg-block-data/
我自己的项目涉及将关系行为字段编辑为块内的其他自定义帖子类型,但过程应该非常相似。关于 OP 的项目:我建议手动完成第一篇文章以生成数组的模板(parse_block)。那么自定义这个数组应该是比较简单的。
【讨论】:
以上是关于使用 wp_insert_post() 时如何在 post_content 中插入古腾堡块?的主要内容,如果未能解决你的问题,请参考以下文章
Wordpress:使用 wp_insert_post() 填充自定义帖子类型字段
php 这是使用wp_insert_post()的示例前端表单。它很快从Android和我的生产代码中删除,而且还没有