显示与所选帖子属性不同的Gutenberg模板

时间:2019-09-12 作者:Cyrus Liew

根据https://developer.wordpress.org/block-editor/developers/block-api/block-templates/, 我已使用以下代码向自定义帖子类型添加了一个模板-

/**
 * Portfolio post template.
 */
function portfolio_post_template() {

  $template = [
    [\'template_path/block\'],
  ];

  $post_type_object = get_post_type_object( \'portfolio\' );
  $post_type_object->template = $template;
}
add_action( \'init\', \'portfolio_post_template\' );
问题来了,我正试图根据用户在帖子属性部分的布局下拉列表中选择的内容显示不同的布局,但动作挂钩init, 没有任何关于当时选择了什么样的帖子模板的信息可以让我设置一个条件来使用不同的古腾堡模板。

是否有其他更好的钩子来代替init?或者,在拥有所选帖子模板的信息的同时,是否有其他方法来设置古腾堡模板?

1 个回复
SO网友:Alvaro

有一个实验性的Innerblocks特性(__experimentalTemplateOptions) 我不确定这是否也会影响帖子模板。

在任何情况下,我认为这都不能解决您的问题,即您希望即使在初始选择模板之后,布局也会发生变化。在这种情况下,编辑器可能会拥有包含用户输入内容的块,甚至是额外的块。因此,更改模板可能会替换这些。考虑到这一点,使用新模板更新当前块的方法可以是:

使用新模板值更新编辑器设置

wp.data.dispatch("core/block-editor").updateSettings({ template:new_template })
然后同步模板

wp.data.dispatch("core/block-editor").synchronizeTemplate()
如果您检查减速器壳体SYNCHRONIZE_TEMPLATE 上述操作实际上与以下操作相同:

const blocks = wp.data.select("core/block-editor").getBlocks();
const updatedBlockList = wp.blocks.synchronizeBlocksWithTemplate( blocks, new_template );

wp.dispatch("core/block-editor").resetBlocks( updatedBlockList );
我还没有测试代码,但我认为传递的参数是正确的。希望这能帮你解决问题。

相关推荐

Custom term templates

所以,我在网上做了一些研究,但没有找到可靠的答案,所以我来了。我需要为特定类别创建自定义woocommerce类别页面。例如,我有一个类别叫做“Awesome”。而不是使用由短代码生成的常规类别页面[product_category category=\"something\"], 我想为自定义特定类别页面Awesome.我发现我需要编辑taxonomy-product_cat.php 但我不知道如何将其链接到名为awesome.换句话说,我正在考虑制作php文件的自定义副本,然后将其添加为主题templ