从当前页面内的其他页面获取块

时间:2018-12-23 作者:Toby Osborne

这是一个模糊的问题,我相信每个人都会说“使用可重用块”,但我希望我只是错过了一些东西。

所以用例是,

我在我的主页上展示了一个案例研究,我想从该案例研究(一种自定义的帖子类型)中提取推荐块;所以我只需要把文本保存在一个地方。没问题,这就是可重用块的用途。

我的问题是,如果我想更改主页上显示的特色案例研究,我必须:

转到新案例研究并设置一个新的可重用块转到包含旧可重用块的每个页面并设置新的可重用块(否则最终会有数百个)还是我错了,(请记住,每个案例研究都会有一个独特的证明;因此,这不会是在当前可重用的案例中更改文本的案例,因为这会在最初的案例研究中更改文本,对吗?)

现在对我来说,这并不太难,但在客户端网站上继续前进,整个过程对他们来说太混乱了(我的意思是,大多数人似乎很难将文本添加到框中)。

基本上,有没有一种方法可以从指定的页面获取特定的块,而无需跳转?你知道,就像选择一个帖子,在帖子中获得一个区块列表,然后选择你想要的区块?

谢谢

1 个回复
最合适的回答,由SO网友:rowatt 整理而成

WordPress提供了一种获取页面块数组的方法parse_blocks() 作用如果从中提取出感兴趣的特定块,则可以使用render_block() 将块放在另一页上。此函数将执行以下操作:

function example_extract_block_type_from_page( $post_id, $block_name ) {

    //get post_content for page
    $post_content = get_post( $post_id )->post_content;

    //get all blocks of requested type
    $blocks = array_filter( parse_blocks( $post_content ), function( $block ) use( $block_name ) {
        return $block_name === $block[\'blockName\'];
    });

    $block_content = \'\';
    foreach( $blocks as $block ) {
        $block_content .= render_block( $block );
    }

    return $block_content;
}
你没有在其他页面上说你想把推荐信放在哪里。如果它在主要帖子内容之外,那么您可以使用自定义模板和/或挂钩将其放置在您想要的地方。如果它位于帖子的主要内容中,那么自定义快捷码可能是最好的方法。

function example_extract_block_type_from_page_shortcode( $atts=[] ) {
    $defaults = [
        \'post_id\' => 0,
        \'block_name\' => \'\'
    ];
    $atts = shortcode_atts( $defaults, $atts );

    return example_extract_block_type_from_page( $atts[\'post_id\'], $atts[\'block_name\'] );
}
add_shortcode( \'example_extract_block_type_from_page\', \'example_extract_block_type_from_page_shortcode\' );
然后像这样[example_extract_block_type_from_page post_id="123" block_name="myblock"] 将显示相关的块内容。

相关推荐