使用register_block_pattern时如何从外部文件加载“内容”

问题描述 投票:0回答:1

我不知道这是否可能,但无论如何我正在尝试。 我创建了一个插件,我想在其中加载 WordPress 中所有预先设计的模式。

我的插件包含以下代码(用于注册我的模式)

function register_my_pattern() {
    register_block_pattern(
    'my-plugin/my-pattern',
        array(
            'title'       => __( 'My Pattern Name', 'my-plugin' ),
            'categories'    => array('my-pattern-category'),
            'content'     => '<!-- wp:group {"backgroundColor":"vivid-green-cyan","layout":{"type":"constrained"}} --> <div class="wp-block-group has-vivid-green-cyan-background-color has-background"><!-- wp:heading --> <h2 class="wp-block-heading">Testing my block</h2> <!-- /wp:heading --></div> <!-- /wp:group -->',
        )
    );
}
add_action( 'init', 'register_my_pattern' );

问题是某些模式的内容变得相当长,我想要一种简单的方法来编辑它们。我讨厌这样一个事实:我需要缩小代码才能通过 register_block_pattern 加载它。 我真的很想将模式的实际内容放在一个单独的文件中,然后从那里加载它(这样我就不必缩小它们,这样我就可以轻松编辑它们)。

所以我尝试这样做: 但这只是在编辑器中添加模式时打印文件的 URL

function register_my_pattern() {
    register_block_pattern(
    'my-plugin/my-pattern',
        array(
            'title'       => __( 'My Pattern Name', 'my-plugin' ),
            'categories'    => array('my-pattern-category'),
            'content'     => plugin_dir_url( __FILE__ ).'my-pattern-file.php',
        )
    );
}
add_action( 'init', 'register_my_pattern' );

我也尝试过这个: 但这会在打开编辑器时加载内容(即使未添加块)

function register_my_pattern() {
    register_block_pattern(
    'my-plugin/my-pattern',
        array(
            'title'       => __( 'My Pattern Name', 'my-plugin' ),
            'categories'    => array('my-pattern-category'),
            'content'     => include( plugin_dir_path( __FILE__ ) . 'my-pattern-file.php'),
        )
    );
}

add_action( 'init', 'register_my_pattern' );

有什么办法可以做到这一点吗?或者说这完全不可能?

wordpress wordpress-gutenberg gutenberg-blocks
1个回答
0
投票

您可以注册 PHP 文件中定义的块模式,方法是将它们包含在块主题的 patterns 目录 中(注意。WordPress 版本 6.0+)。

虽然这不是像您的示例那样基于插件的解决方案,但它保留了 PHP 的块模式和主题的一部分。

*.php
模式文件放置在
your-theme-name/patterns/
中,并在主题处于活动状态时自动加载到编辑器中。

© www.soinside.com 2019 - 2024. All rights reserved.