古腾堡的GET_POST_ROUTURE

时间:2019-01-12 作者:kosher

我有一个网站,在那里我创建了一个页面,从帖子中提取图库图像,并将它们放入滑块中。

我使用了以下代码:

// gets the gallery info
$gallery = get_post_gallery( $post->ID, false );
// makes an array of image ids
$ids = explode ( ",", $gallery[\'ids\'] );
然后,我使用wp\\u get\\u attachment\\u image()插入了这些图像。

不幸的是,有了WP 5.0和Gutenberg,get\\u post\\u gallery不再适用于新添加的内容。get\\u post\\u gallery似乎使用了一个与Gutenberg不再兼容的短代码。

我仍然在学习古腾堡和闭塞系统。在我更好地理解这一点之前,我想知道是否有人对如何从古腾堡的画廊获取图像ID有什么建议?

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

根据birgire的建议,我提出了以下解决方案,该解决方案与旧的pre WP 4都能很好地配合使用。x数据和在5.0下添加的较新帖子。

// if there is a gallery block do this
if (has_block(\'gallery\', $post->post_content)) {
    $post_blocks = parse_blocks($post->post_content);
    $ids = $post_blocks[0][attrs][ids];
} 
// if there is not a gallery block do this
else {
    // gets the gallery info
    $gallery = get_post_gallery( $post->ID, false );
    // makes an array of image ids
    $ids = explode ( ",", $gallery[\'ids\'] );
}

SO网友:birgire

这个get_post_gallery() 是的包装器get_post_galleries() 有一张公开票#43826 用于库块支持。这目前设置为5.1里程碑,但可能会更改。

你甚至可以看看patches, 使用例如。parse_blocks( $post->post_content )has_block( \'gallery\', $post->post_content ) , 了解需要什么来充分支持这一点。

与此同时,您可以查看render_block 过滤以根据需要修改库块的渲染输出。

下面是一个针对core/gallery 块并使用包含库图像ID的块属性:

/**
 * Modify the output of the rendered core/gallery block.
 */
add_filter( \'render_block\', function( $block_content, $block ) {
    if ( \'core/gallery\' !== $block[\'blockName\'] || ! isset( $block[\'attrs\'][\'ids\'] ) ) {
           return $block_content;
    }
    $li = \'\';
    foreach( (array) $block[\'attrs\'][\'ids\'] as $id ) {
        $li .= sprintf( \'<li>%s</li>\', wp_get_attachment_image( $id, \'large\' ) );
    }
    return sprintf( \'<ul>%s</ul>\', $li ); 
}, 10, 2 );

相关推荐

Broken images on iphone

我在iPhone上破坏了图像,这只发生在我大约一周前添加新图像的主页上(新图像的格式和大小与旧图像完全相同)这是网站:CartonMaster。伊利诺伊州公司提前感谢,