此功能似乎是块编辑器的独有功能。这也不是特别聪明。它所做的只是检查帖子是否有1个或2个块(没有更多),然后将第一个块映射到适当的帖子格式列表,如下所示:
switch ( name ) {
case \'core/image\':
return \'image\';
case \'core/quote\':
case \'core/pullquote\':
return \'quote\';
case \'core/gallery\':
return \'gallery\';
case \'core/video\':
case \'core-embed/youtube\':
case \'core-embed/vimeo\':
return \'video\';
case \'core/audio\':
case \'core-embed/spotify\':
case \'core-embed/soundcloud\':
return \'audio\';
}
这是
getSuggestedPostFormat()
选择器功能,它是
core/editor
数据存储。您可以在古腾堡存储库中看到完整的源代码
here.
This 似乎可以很好地概括块编辑器中存储的数据。
要在编辑器的JS中使用此函数,可以使用:
wp.data.select(\'core/editor\').getSuggestedPostFormat();
逻辑非常简单,在PHP中用
parse_blocks()
, 但由于它基于使用的块,因此它只对使用块编辑器构建的内容有用。
function wpse_346884_get_suggested_post_format( $content ) {
if ( ! has_blocks( $content ) ) {
return null;
}
$block = null;
$blocks = parse_blocks( $post->post_content );
if ( 1 === count( $blocks ) ) {
$block = $blocks[0][\'blockName\'];
}
if ( 2 === count( $blocks ) ) {
if ( \'core/paragraph\' === $blocks[1][\'blockName\'] ) {
$block = $blocks[0][\'blockName\'];
}
}
switch ( $block ) {
case \'core/image\':
return \'image\';
case \'core/quote\':
case \'core/pullquote\':
return \'quote\';
case \'core/gallery\':
return \'gallery\';
case \'core/video\':
case \'core-embed/youtube\':
case \'core-embed/vimeo\':
return \'video\';
case \'core/audio\':
case \'core-embed/spotify\':
case \'core-embed/soundcloud\':
return \'audio\';
}
return null;
}
然后,您可能需要实现一些额外的逻辑,以确保主题支持返回的post类型。